python如何更改嵌套列表中的元素

时间:2014-02-19 22:43:56

标签: python nested-lists

我一直在使用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]]
>>> 

但我仍然想知道为什么第一个版本不起作用,我如何初始化很多元素的列表?

1 个答案:

答案 0 :(得分:8)

您有10次相同 [0, 0]元素的列表:

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