Python中如何复制含集合的列表,使原列表与副本互不影响?
问题原因
你用的a[:]和copy.copy(a)都是浅拷贝——它们只会复制列表的顶层结构,列表里的集合元素还是共享同一个内存引用。所以修改新列表里的集合时,原列表的对应集合也会跟着变化,反之亦然。
解决方案
要让原列表和新列表彻底互不影响,需要使用深拷贝:copy.deepcopy()。它会递归复制所有嵌套的对象(包括列表里的每个集合),创建完全独立的副本。
示例代码:
import copy a = [{1,2}, {0}, {0}, set()] b = copy.deepcopy(a) # 验证独立性:修改b中的集合,a不受影响 b[0].add(3) print(a[0]) # 输出 {1, 2} print(b[0]) # 输出 {1, 2, 3}
深拷贝会为每个集合创建全新的对象,而非复用原引用,因此两个列表的所有元素都完全独立,修改任意一方都不会影响另一方。
内容的提问来源于stack exchange,提问作者王洲洋
相关产品推荐
相关产品推荐

