Python字符串不是不可变的?

bak*_*kar 2 python python-2.7

直到现在我都相信Python字符串是不可变的但是当我尝试这个时我感到很困惑

>>> a
'hello world !'
>>> id(a)
140521043795728
>>> a+="d"
>>> id(a)
140521043795728
>>> a+="d"
>>> id(a)
140521043795728
>>> a
'hello world !dd'
Run Code Online (Sandbox Code Playgroud)

如果我使用+=运算符,虽然字符串已更改,但它不会更改对象ID.在这种情况下发生了什么?

现在这有点不同?https://ideone.com/eg1SIN

谁能解释一下这里发生了什么?

Col*_*Two 9

id返回一个整数值,该值对于传递它的对象是唯一的.如果a是对字符串的唯一引用'hello world !',则a += "b"可以'hello world !''hello world !b'创建字符串之前结束字符串的生存期,因此重用旧字符串的ID(这是完全有效的行为).

添加对字符串的另一个引用'hello world !'(例如,通过b = a在修改之前执行a)应该导致ID发散.