Why doesn't calling a string method (such as .replace or .strip) modify (mutate) the string?

python, string

Solution

This is because strings are immutable in Python.

Which means that `X.replace("hello","goodbye")` returns a copy of `X` with replacements made. Because of that you need to replace this line:

X.replace("hello", "goodbye")

with this line:

X = X.replace("hello", "goodbye")

More broadly, this is true for all Python string methods that change a string's content, e.g. `replace`,`strip`,`translate`,`lower`/`upper`,`join`,...

You must assign their output to something if you want to use it and not throw it away, e.g.

X  = X.strip(' \t')
X2 = X.translate(...)
Y  = X.lower()
Z  = X.upper()
A  = X.join(':')
B  = X.capitalize()
C  = X.casefold()

and so on.

Problem

I tried this code to do simple string replacement: ``` X = "hello world" X.replace("hello", "goodbye") ``` Why doesn't `X` change, from `"hello world"` to `"goodbye world"`?

Original source

Related problems