gpt4 book ai didi

Python - copy.copy() 的元素是否仍与原始元素共享内存?

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:11 29 4
gpt4 key购买 nike

我想制作一个列表的副本(字面意思是一个单独的克隆,与原始列表没有任何共享)。我使用了 copy.copy() 并创建了 2 个单独的列表,但为什么每个副本的元素似乎仍然共享?

这很难解释,请查看以下输出。

>>> a = [[0,1], [2,3]]
>>> import copy
>>> b = copy.copy(a)
>>> temp = b.pop()
>>> temp
[2, 3]
>>> a
[[0, 1], [2, 3]]
>>> b
[[0, 1]]
>>> temp.append(4)
>>> temp
[2, 3, 4]
>>> a
[[0, 1], [2, 3, 4]]
>>> b
[[0, 1]]

如您所见,temp 是从 b 中弹出的,但是当我更改 temp(也就是添加新内容)时,temp 中的数据strong>a 也发生了变化。

我的问题是:这是 deepcopy 的预期行为吗?那么我怎样才能制作一份完全独立的列表副本呢?

P/S:如上例,我想我可以做到
temp = copy.copy(b.pop())
但这是正确的方法吗?有没有其他方法可以做我想做的事?

P/S 2:当我使用 b = a[:] 时也会发生这种情况

谢谢!

最佳答案

您应该在那里使用 deepcopy(),因为 copy() 对您引用的对象进行浅克隆,而不是其中的对象。如果您想要整个对象(以及其中的对象),请改用 deepcopy()。

请引用链接以获得更好的理解

What is the difference between a deep copy and a shallow copy?

https://docs.python.org/2/library/copy.html

关于Python - copy.copy() 的元素是否仍与原始元素共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39262918/

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