每次更改不可变对象时,是否在内存中分配了新对象?

时间:2019-04-15 13:25:22

标签: python

考虑以下示例:

(Python 3.7.2)
>>> a = '1'
>>> id(a)
4364850768
>>> a += '2'
>>> id(a)
4365285672
>>> a += '3'
>>> id(a)
4365285672

我的理解是,将字符添加到字符串a时,将创建一个新对象,并复制旧对象的内容并添加新字符。当id更改时附加2时似乎确实是这种情况,但附加3时似乎不是这种情况。我正在寻找有关ID为什么第二次不更改的说明。

1 个答案:

答案 0 :(得分:2)

确实创建了一个新对象,但是看起来Python正在回收id。这是一个实现细节-最好不要依赖id()

为证明这一点,请保留另一个“ 12”副本:

>>> id(a)
4377270112
>>> a = '1'
>>> id(a)
4376257360
>>> a += '2'
>>> id(a)
4377270152
>>> b = a 
>>> a += '3'
>>> id(a)
4377270032
>>> id(b)
4377270152