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

bbr*_*all 2 python string mutability python-2.7

当我尝试使用+ =运算符修改字符串,并使用id()方法来检查对象的标识时,字符串似乎是可变的.有人面对这种奇怪的python行为吗?

a = '123'

print id(a)
# 89806008

a += '1'

print id(a)
# 89245728

a += '1'

print id(a)
# 89245728

print a

# '12311'
Run Code Online (Sandbox Code Playgroud)

使用 a = a + '1'doesnt具有相同的效果,并更改字符串ID.

Sco*_*ter 7

如果你对这个字符串是可变的是正确的,那么添加

b = a
Run Code Online (Sandbox Code Playgroud)

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

原因是因为字符串a在"增量"之前不再使用,所以可以重新使用id.但是通过将该字符串分配给它b,它现在某处使用,并且新字符串a不能重用该id.