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

发布于 2021-01-29 16:18:43

这个问题已经在这里有了答案

为什么我不能只更改Python嵌套列表中的单个元素[重复] (2个答案)

6年前关闭。

我已经使用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]]
>>>

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

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    l=[[0,0]]*10
    

    每当您修改一个列表时,它都会全部修改,因为 它们是相同的list

    一种使它们独特的安全方法是:

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看