2012-11-12 44 views
3

來自其他語言,我對Python列表中的Python變量賦值的方式有些困惑。舉個例子,比方說:python中的列表賦值行爲

x = [4, 5, 2, 70, 1] 
y = x 
y.sort() 

如果x和y都印,結果是兩個變量相同:

x = [1, 2, 4, 5, 70] 
y = [1, 2, 4, 5, 70] 

我也不太想到這一行爲。我認爲x的順序不會改變,因爲我只在列表y上應用排序方法。

在另一方面,如果我指定列表x的內容用切片運營商列出Y,那麼我會達到預期的(至少在我的情況)的行爲:

x = [4, 5, 2, 70, 1] 
y = x[:] 
y.sort() 

如果x和y被打印,我看到列表x保持不變。

x = [4, 5, 2, 70, 1] 
y = [1, 2, 4, 5, 70] 

有人可以解釋背後的邏輯嗎?

謝謝!

+0

@MartijnPieters oops,我修復了它。謝謝。 – marillion

+0

[Python引用]的可能重複(http://stackoverflow.com/questions/2797114/python-references) – Junuxx

回答

6

切片製作副本,而賦值將兩個標籤都指向同一個列表實例。排序y對列表實例進行排序,該實例與x指向的實例相同。或者,您可以使用y = sorted(x)來獲得您想要的結果。