除非分配输出,为什么调用Python字符串方法不做任何事情?


136

我尝试做一个简单的字符串替换,但是我不知道为什么它似乎不起作用:

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

我想将单词更改hellogoodbye,因此应将字符串更改"hello world""goodbye world"。但是X仍然存在"hello world"。为什么我的代码不起作用?

Answers:


232

这是因为字符串在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()

等等。


1
小知识点:对于x += 'a'特殊情况,字符串可以
更改

@Chris_Rands:看起来您是对的,但是从外面看,它没有真正的可变性效果-一些实现检查此功能是否真正使用,如果不使用,那么它实际上会发生变化。真的吗?
塔德克

@Tadeck好吧,我认为这是真实的,但这只是一个CPython优化,在这里并不直接相关(这就是为什么我说我是个
书呆子

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.