【问题标题】:Is a new object allocated in memory each time an immutable object is changed? [duplicate]每次更改不可变对象时是否会在内存中分配一个新对象? [复制]
【发布时间】:2019-09-05 11:56:21
【问题描述】:

考虑以下示例:

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

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

【问题讨论】:

  • 吹毛求疵:根据定义,不可变对象不会改变。您是正确的,创建了一个新对象。

标签: python


【解决方案1】:

确实创建了一个新对象,但看起来 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

【讨论】:

    猜你喜欢
    • 2014-05-05
    • 2017-12-19
    • 1970-01-01
    • 2013-06-26
    • 2023-03-28
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多