正如我在类里面学到的那样,我了解浅拷贝和深拷贝之间的区别。但是以下没有意义
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/