修改原始列表时如何制作对象列表的副本?

时间:2011-07-07 15:05:20

标签: python list object

  

可能重复:
  How to clone a list in python?
  What is the best way to copy a list in 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 个答案:

答案 0 :(得分:6)

使用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 docs以获取有关深度和深度的说明。浅拷贝。

答案 1 :(得分:3)

这样可行。

import copy
copy_list = copy.copy(original_list)

另外

copy_list = list(original_list)

答案 2 :(得分:1)

使用deepcopy

  

返回x的深层副本。

from copy import deepcopy

original_list = [Object1(), Object2(), Object3()]
copy_list = deepcopy(original_list)
original_list.pop()

但请注意,在您的情况下切片会更快:

copy_list = original_list[:]