这是我的密码

store = [set() for i in xrange(0,5)]
items = store[:]
store[1].add(1)

在第3行之后,它也改变了items
print items

output : set([]), set([1]), set([]), set([]), set([])

我尝试使用for循环分别进入store中每个集合的每个元素,并在清除items中的每个集合后将其添加到items中,得到了相同的结果
是否仍然存在按值复制上面的集合而不是其引用,我只需要复制集合的非空列表的值并再次遍历它,但是由于它是按引用复制的,所以我的程序无法工作。

最佳答案

您可以使用deepycopy

from copy import deepcopy
items = deepcopy(store)

>>> a = [1,2,3]
>>> b = deepcopy(a)
>>> b[1] = 1
>>> print b
[1,1,3]
>>> print a
[1,2,3]

深度复制构造一个新的复合对象,然后递归地,
将原始对象的副本插入其中。(来自deepcopy文档)
它创建一组完全不同的内存空间,而不是简单地指向同一内存空间的浅拷贝。

10-07 19:57
查看更多