这是我的密码
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文档)
它创建一组完全不同的内存空间,而不是简单地指向同一内存空间的浅拷贝。