2011-05-23 335 views
5

我想在python中創建另一個列表的備份列表。這是一個代碼示例。在python中創建備份列表

x = [1,2,3] 
y = x 
x.pop(0) 

print y 

然而,這產生的結果y = [2,3]時,我希望它產生[1,2,3]。我如何去做獨立於x列表的y列表?

回答

17

一個常見的成語是y = x[:]。這會製作x的淺拷貝並將其存儲在y中。

請注意,如果x包含對對象的引用,則y也將包含對相同對象的引用。這可能是也可能不是你想要的。如果不是,請看copy.deepcopy()

+0

不要忘記提'l [:]'是一個常用的習語。 – Tom 2011-05-23 19:22:51

4

下面是做到這一點的一種方法:

import copy 

x = [1,2,3] 
y = copy.deepcopy(x) 
x.pop(0) 
print x 
print y 

docs here

+1

+1,因爲它可以與其他對象一起使用,而不僅僅是列表。儘管在這種情況下'copy.copy'可以完成這項工作。 – 2011-05-23 17:38:06

0

雖然AIX擁有最吝嗇的答案在這裏,完整性你也可以這樣做:

y = list(x) 

這將強制創建一個新的列表,並且很清楚你想要做什麼。我可能會自己這樣做。但請注意 - 它不會進行深層複製(因此所有元素都是相同的引用)。

如果你想確定沒有什麼事情發生,你可以使它成爲一個元組,這將防止刪除和添加元素。如果你想這樣做:

y = tuple(x) 

作爲最後一種選擇,你可以這樣做:

y = [a for a in x] 

這(做基本的變換或過濾和偉大的)列表解析的方法來複制。所以真的,你有很多選擇。