在Python中通过值复制集合列表

2 投票
2 回答
877 浏览
提问于 2025-04-18 00:25

这是我的代码

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]

一个 深拷贝 会创建一个全新的复合对象,然后递归地将原始对象中的内容复制到这个新对象里。(摘自深拷贝的文档)

它会创建一组完全不同的内存空间,而不是像浅拷贝那样,仅仅指向同一个内存空间。

撰写回答