我想在python中創建另一個列表的備份列表。這是一個代碼示例。在python中創建備份列表
x = [1,2,3]
y = x
x.pop(0)
print y
然而,這產生的結果y = [2,3]
時,我希望它產生[1,2,3]
。我如何去做獨立於x列表的y列表?
我想在python中創建另一個列表的備份列表。這是一個代碼示例。在python中創建備份列表
x = [1,2,3]
y = x
x.pop(0)
print y
然而,這產生的結果y = [2,3]
時,我希望它產生[1,2,3]
。我如何去做獨立於x列表的y列表?
一個常見的成語是y = x[:]
。這會製作x
的淺拷貝並將其存儲在y
中。
請注意,如果x
包含對對象的引用,則y
也將包含對相同對象的引用。這可能是也可能不是你想要的。如果不是,請看copy.deepcopy()
。
+1,因爲它可以與其他對象一起使用,而不僅僅是列表。儘管在這種情況下'copy.copy'可以完成這項工作。 – 2011-05-23 17:38:06
雖然AIX擁有最吝嗇的答案在這裏,完整性你也可以這樣做:
y = list(x)
這將強制創建一個新的列表,並且很清楚你想要做什麼。我可能會自己這樣做。但請注意 - 它不會進行深層複製(因此所有元素都是相同的引用)。
如果你想確定沒有什麼事情發生,你可以使它成爲一個元組,這將防止刪除和添加元素。如果你想這樣做:
y = tuple(x)
作爲最後一種選擇,你可以這樣做:
y = [a for a in x]
這(做基本的變換或過濾和偉大的)列表解析的方法來複制。所以真的,你有很多選擇。
不要忘記提'l [:]'是一個常用的習語。 – Tom 2011-05-23 19:22:51