2014-02-19 75 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

相关问题