python - 为什么整数列表的深拷贝在内存中返回相同的整数?

标签 python python-3.x deep-copy

正如我在类里面学到的那样,我了解浅拷贝和深拷贝之间的区别。但是以下没有意义

import copy

a = [1, 2, 3, 4, 5] 

b = copy.deepcopy(a)

print(a is b)
print(a[0] is b[0])
----------------------------
~Output~
>False
>True
----------------------------

print(a[0] is b[0]) 不应该评估为 False,因为对象及其组成元素正在深拷贝中的不同内存位置重新创建?我只是在测试这个,因为我们在类里面讨论过这个,但它似乎不起作用。

最佳答案

在另一个答案中建议这可能是由于 Python 具有用于小整数的实习对象。虽然这句话是正确的,但这并不是导致这种行为的原因。

让我们看看当我们使用更大的整数时会发生什么。

> from copy import deepcopy
> x = 1000
> x is deepcopy(x)
True

如果我们深入研究 copy模块我们发现调用 deepcopy具有原子值的延迟调用函数 _deepcopy_atomic .

def _deepcopy_atomic(x, memo):
    return x

所以实际发生的是 deepcopy不会复制原子值,而只会返回它。

例如,int 就是这种情况。 , float , str , function等等。

关于python - 为什么整数列表的深拷贝在内存中返回相同的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31621997/

相关文章:

python - python 中的 mxnet ndarray 索引

python - 使用 Mock 修补函数

python - 为什么转义字符在python中会变成类似\x0的字符串?

python - 不带括号的打印字典

python - Matplotlib 在子图中的条形上打印值

java通过拷贝构造函数进行深拷贝

python - 多处理给出 AssertionError : daemonic processes are not allowed to have children

python - 如何添加以 : ('name' , 形式给出的元组列表给出的数字(数字)

c - C中的指针深拷贝

python - 对 Python3 中特定类的实例进行赋值深复制