Python += 运算符是否使字符串可变?

Does Python += operator make string mutable?

当我尝试使用 += 运算符修改字符串,并使用 id() 方法检查对象的身份时,字符串似乎是可变的。有人遇到过如此奇怪的 python 行为吗?

a = '123'

print id(a)
# 89806008

a += '1'

print id(a)
# 89245728

a += '1'

print id(a)
# 89245728

print a

# '12311'

使用a = a + '1'效果不一样,改字符串id。

如果您关于此字符串可变的判断正确,则添加

b = a

在你的第二个 a += '1' 之前应该不会对你的输出有任何影响。但确实如此。

原因是因为在"increment"之前的字符串a已经没有地方再用了,id可以重新使用。但是通过将该字符串分配给 b,它现在 在某处使用,并且 a 的新字符串无法重新使用该 ID。