2015-11-05 58 views
0

首先,對於不好的標題感到抱歉。我不知道如何來形容這個問題:列表值問題

a = 1 
b = 2 
c = 3 

aa = 0 
bb = 0 
cc= 0 

list = [[1, a] ,[2, b] ,[3 ,c]] 
print(list) 

secondList = [aa, bb, cc] 

x = -1 
for item in list: 
    x=x+1 
    if list[x][1] == a: 
     print(aa, "aa") 
     secondList[x] = secondList[x] + 1 
     print(aa , "aa") 
     print(x, "x") 
     print(secondList[x], "SecondList[x]") 
     secondList = [aa, bb, cc] 
     print(secondList) 

我想到:

[[1, 1], [2, 2], [3, 3]] 
0 aa 
1 aa 
0 x 
1 SecondList[x] 
[1, 0, 0] 

而是我得到:

[[1, 1], [2, 2], [3, 3]] 
0 aa 
0 aa 
0 x 
1 SecondList[x] 
[0, 0, 0] 

爲什麼AA的值不改變我的時候打印它或secondList,但是當我打印secondList [x]?

回答

0

secondList = [aa, bb, cc]

拷貝aa, bb, cc通過secondList。雖然Python中的整數是對象,但是用戶定義的對象被複制引用,它們是原始類型,所以淺表副本足以創建具有相同值的新整數。因此aa並不是指secondList[0]。所以secondList[x] = secondList[x] + 1不會更新aa

編輯:我的意思的證明,請嘗試以下操作:

x = 1 
y = x 
x = 2 
print(y) 

這暗示你會認爲這版畫「2」,但它不是打印出「1」。這表明整數和所有其他基本類型都是按值複製的。

+0

評論不適用於擴展討論;這個談話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/94365/discussion-on-answer-by-willywonka-dailyblah-list-value-issue)。 –

1

因爲它們是獨立的,一方面是變量aa,另一方面是第二個列表的第一個元素。

這樣做:

secondList = [aa, bb, cc] 

不會使依賴

1

列表改變第一位置的值「secondList」無關不斷變化的變量「AA」的價值。

當您創建secondList時,您可以在與aa,bb,cc所用地址不同的新內存地址中使用變量aa,bb,cc的值。

0

整數是不變的,所以當你做你secondList[x] + 1正在創建一個新的整數對象與價值1,堅持在你的列表中,而不是修改不可改變0存儲在aa