在Python中通过值复制集合列表
这是我的代码
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([])
我尝试使用循环,逐个处理store
中的每个集合,然后在清空items
中的每个集合后,把它们添加进去,但结果还是一样
有没有办法按值复制上面的集合,而不是按引用?我只需要复制一个非空的集合列表的值,然后再遍历一次,但因为是按引用复制的,所以我的程序无法正常工作。
2 个回答
2
你只是创建了一个store
的浅拷贝;里面引用的可变集合并没有被复制。
你还需要把每个集合也复制一遍:
items = [set(s) for s in store]
或者使用copy.deepcopy()
函数:
import copy
items = deepcopy(store)
3
你可以使用 deepcopy
:
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]
一个 深拷贝 会创建一个全新的复合对象,然后递归地将原始对象中的内容复制到这个新对象里。(摘自深拷贝的文档)
它会创建一组完全不同的内存空间,而不是像浅拷贝那样,仅仅指向同一个内存空间。