Python字符串不是不可变的?

时间:2015-10-02 16:18:41

标签: 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'

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

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

有人可以解释这里发生了什么吗?

2 个答案:

答案 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()值。