array1=[0,1,2]
array2=array1
array2[0]=234234
print array1
OUTPUT:設置兩個數組等於
[234234, 1, 2]
爲什麼蟒蛇變 '數組1'?不應該只是改變array2? 當我更改array2時,如何防止python更改array1?
array1=[0,1,2]
array2=array1
array2[0]=234234
print array1
OUTPUT:設置兩個數組等於
[234234, 1, 2]
爲什麼蟒蛇變 '數組1'?不應該只是改變array2? 當我更改array2時,如何防止python更改array1?
使用切片表示法來複制這樣
array2 = array1[:]
或者你可以使用list
功能
array2 = list(array1)
當你將一個列表到另一個列表中,將不會創建一個新的列表,但無論是變量將被引用到相同的列表中。這可以通過這個程序來確認。
array1 = [1, 2, 3, 4]
array2 = array1
print id(array1), id(array2)
它們都會打印相同的ID。這意味着它們都是相同的(如果你來自C背景,你可以把它們看作是指針(在CPython實現中它們確實是指針,其他實現選擇打印唯一的ID - 請檢查小二的評論))。瞭解更多關於id
here。當你做
array3 = array1[:]
array4 = list(array1)
print id(array1), id(array3), id(array4)
你會得到不同的ID,因爲在這些情況下將創建新的列表。
+1 FWIW,'id's就像指針一樣是CPython特有的實現細節。如果Python解釋器不同,它們可能不是。但是在這種情況下,它們仍然保證具有相同的值,即使該值不是列表的內存地址。 – kojiro
omg謝謝你我擁有你我的生活。也是你低估了我的人,因爲如果是這樣的話,我肯定會考慮收回前面的陳述。 – user2875270
@ user2875270不可以。我沒有downvote :)這是我們都有的初學者問題。所以,我只是表示這個問題已經在另一個線索中得到了回答。 – thefourtheye
array1
和array2
是同一列表中的兩個名稱,因爲這就是您設置它們的方式。如果你不希望這樣,複製使用下列方法之一名單:
array2 = array1[:]
array2 = list(array1)
歡迎來到StackOverflow。不要太擔心downvoters - 有些人認爲每個重複或初學者問題都應該被低估。但除了重複之外,這是一個很好的問題:問題是什麼很清楚,並且它顯示了清楚地表明問題的簡潔代碼。 – kojiro