gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:11:29 29 4
gpt4 key购买 nike

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

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com