如何让复制的对象列表在修改原列表时不变?

18 投票
3 回答
54998 浏览
提问于 2025-04-16 21:01

可能的重复问题:
如何在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 文档

撰写回答