补充 Tim Peters 的答案。来自copy 模块文档:
可以使用dict.copy() 制作字典的浅拷贝,并通过分配整个列表的一个切片来制作列表,例如copied_list = original_list[:]。
另外,为了解决 Tim Peters 回答下方的评论,关于 copy 和 deepcopy 之间的区别:
浅拷贝和深拷贝之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)有关:
- 浅拷贝构造一个新的复合对象,然后(在可能的范围内)向其中插入对原始对象的引用。
- 深拷贝构造一个新的复合对象,然后递归地将原始对象的副本插入其中。
例如看以下:
>>> import copy
>>> l1 = [[1,2], 2, 3]
>>> l2 = copy.copy(l1)
>>> l1[0].append(3)
>>> l1
[[1, 2, 3], 2, 3]
>>> l2
[[1, 2, 3], 2, 3]
>>> l3 = copy.deepcopy(l1)
>>> l1[0].append(4)
>>> l1
[[1, 2, 3, 4], 2, 3]
>>> l3
[[1, 2, 3], 2, 3]
当l2 与(浅)copy 复制时,第一个条目的引用在l1 和l2 之间共享。因此,变异l1[0] 也会变异l2[0]。但是在deepcopy (l3) 中,复制是递归完成的,所以l1[0] != l3[0] 和变异一个不会影响另一个。