如何让复制的对象列表在修改原列表时不变?
可能的重复问题:
如何在Python中复制一个列表?
在Python中复制列表的最佳方法是什么?
original_list = [Object1(), Object2(), Object3()]
copy_list = original_list
original_list.pop()
如果我从原始列表中删除一个对象,怎么才能让复制的列表不受到影响呢?
原始列表
[<Object.Object instance at 0x00EA29E0>, <Object.Object instance at 0x00EA2DC8>, <Object.Object instance at 0x00EA2EE0>]
在从原始列表中删除元素后,复制的列表应该保持不变(我希望它和上面的内容一样)
[<Object.Object instance at 0x00EA29E0>, <Object.Object instance at 0x00EA2DC8>]
3 个回答
1
使用 deepcopy
这会返回 x 的一个深拷贝。
from copy import deepcopy
original_list = [Object1(), Object2(), Object3()]
copy_list = deepcopy(original_list)
original_list.pop()
不过要注意,在你的情况下,切片会更快:
copy_list = original_list[:]
8
这个是可以用的。
import copy
copy_list = copy.copy(original_list)
还有
copy_list = list(original_list)
17
要进行深拷贝,可以使用 copy.deepcopy():
import copy
copy_list = copy.deepcopy(original_list)
如果想要进行浅拷贝,可以使用 copy.copy():
import copy
copy_list = copy.copy(original_list)
或者可以用切片,切片时不指定起止点:
copy_list = original_list[:]
想了解深拷贝和浅拷贝的详细解释,可以查看 copy 文档。