为什么调用字符串方法(如 .replace 或 .strip)不改变字符串?

154 投票
2 回答
106428 浏览
提问于 2025-04-17 12:34

我试着用这段代码来做简单的字符串替换:

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

为什么X没有从"hello world"变成"goodbye world"呢?

2 个回答

0

所有的字符串函数,比如 lower(变小写)、upper(变大写)、strip(去掉空格),都是返回一个新的字符串,而不会改变原来的字符串。如果你尝试去修改一个字符串,虽然你可能会觉得 它是可以迭代的,但实际上是会失败的。

x = 'hello'
x[0] = 'i' #'str' object does not support item assignment

这里有一篇很好的文章,讲述了字符串不可变的重要性: 为什么Python中的字符串是不可变的?使用它们的最佳实践

261

这是因为在Python中,字符串是不可变的

这意味着当你使用X.replace("hello","goodbye")时,它会返回一个新的字符串,这个字符串是对X进行替换后的结果。所以你需要把这一行:

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

替换成这一行:

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

更广泛地说,所有改变字符串内容的Python字符串方法都是这样,比如replacestriptranslatelower/upperjoin等等。

如果你想使用这些方法的结果,就必须把它们的输出赋值给某个变量,否则你会把它们丢掉,例如:

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

等等。

撰写回答