2011-07-07 89 views
3

可能重复:
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>] 

回答

2

这将工作。

import copy 
copy_list = copy.copy(original_list) 

而且

copy_list = list(original_list) 
5

使用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

+0

'copy.copy()实际上是'浅拷贝,'copy.deepcopy()'是深拷贝 –

+0

@ Paul Woolcock:谢谢你的收获。我已经纠正了答案。 – GreenMatt

+0

让我们注意到,切片也是浅拷贝,因为这没有明确说过:https://stackoverflow.com/a/19068714/3249197 – Starwarswii

1

使用deepcopy

返回X的深层副本。

from copy import deepcopy 

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

但请注意,切片会在你的情况下,提高工作效率:

copy_list = original_list[:] 
相关问题