直到现在我都相信Python字符串是不可变的但是当我尝试这个时我感到很困惑
>>> a
'hello world !'
>>> id(a)
140521043795728
>>> a+="d"
>>> id(a)
140521043795728
>>> a+="d"
>>> id(a)
140521043795728
>>> a
'hello world !dd'
如果我使用+=
运算符,尽管字符串已更改,但它不会更改对象ID。在这种情况下发生了什么?
现在这有点不同? https://ideone.com/eg1SIN
有人可以解释这里发生了什么吗?
答案 0 :(得分:9)
id
返回一个整数值,该值对于传递它的对象是唯一的。如果a
是对字符串'hello world !'
的唯一引用,那么在创建字符串a += "b"
之前,执行'hello world !'
可能会结束字符串'hello world !b'
的生命周期,因此重用旧字符串的ID(这是完全有效的行为)。
添加对字符串'hello world !'
的另一个引用(例如,在修改b = a
之前执行a
)会导致ID发散。
答案 1 :(得分:1)
字符串对象本身是不可变的,但是,根据具有非重叠生命周期的Python documentation对象,可能具有相同的id()值。