2011-07-07 62 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[:]