2014-02-19 111 views
1

我一直在使用python很多,今天我感到驚訝的是一個簡單的嵌套列表。python如何更改嵌套列表中的元素

如何更改我的列表元素的值?

>>> l=[[0,0]]*10 
>>> l 
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]] 
>>> l[0] 
[0, 0] 
>>> l[0][0] 
0 
>>> l[0][0]=1 #here comes the question 
>>> l 
[[1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0]] 
>>> 

我希望作爲最終結果

l=[[1,0],[0,0],[0,0]...] 

爲什麼不追加? (我想要一個理論上的解釋) 我怎樣才能得到想要的結果?

謝謝。

編輯: 在以另一種方式,我得到了想要的結果

>> l=[[0,0],[0,0]] 
>>> l 
[[0, 0], [0, 0]] 
>>> l[0][0]=1 
>>> l 
[[1, 0], [0, 0]] 
>>> 

但我仍然不知道爲什麼第一個版本不工作,並啓動列表我怎麼能初始化很多的元素列表?

回答

5

你有相同[0, 0]元素在這裏10次列表:

l=[[0,0]]*10 

任何時候您修改一個,它會修改所有這些,因爲它們是相同的列表

一種安全的方法,使他們獨特的是:

l = [[0, 0] for _ in range(10)] 

一個簡單的方法來檢查將打印每個id,這就是它的存儲在存儲器地址:

>>> for element in l: 
...  print id(element) 
... 
34669128 
34669128 
34669128 
34669128 
34669128 
34669128 
34669128 
34669128 
34669128 
34669128 
+0

啊,你打敗了我!儘管如此,我想我們應該找到成千上萬個這樣的人之一。 –

+0

我正在練習我的速度打字。近距離投票已經投了 – mhlester

+0

所以我以前的代碼等於s = [0,0] l = [s * 10],所以我總是有相同的指針? – Donbeo

相關問題