当前位置:   article > 正文

python嵌套列表索引_python – 嵌套列表索引

python列表嵌套列表索引

这个问题是由python选择通过引用传递列表的事实引起的.

通常,变量按“值”传递,因此它们独立运行:

>>> a = 1

>>> b = a

>>> a = 2

>>> print b

1

但是,由于列表可能会相当大,而不是将整个列表移动到内存之外,Python选择使用引用(C语言中的“指针”).如果您将另一个变量分配给另一个变量,则只需为其分配引用.这意味着你可以有两个变量指向内存中的相同列表:

>>> a = [1]

>>> b = a

>>> a[0] = 2

>>> print b

[2]

所以,在你的第一行代码中你有4 * [0].现在[0]是指向内存中值0的指针,当你乘以它时,你会得到四个指针到内存中的相同位置.但是当您更改其中一个值时,Python知道指针需要更改以指向新值:

>>> a = 4 * [0]

>>> a

[0, 0, 0, 0]

>>> [id(v) for v in a]

[33302480, 33302480, 33302480, 33302480]

>>> a[0] = 1

>>> a

[1, 0, 0, 0]

当您将此列表乘以时,会出现问题 – 您将获得列表指针的四个副本.现在,当您更改一个列表中的一个值时,所有四个更改在一起:

>>> a[0][0] = 1

>>> a

[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]

解决方案是避免第二次乘法.一个循环做这个工作:

>>> some_list = [(4 * [0]) for _ in range(4)]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/463448
推荐阅读
相关标签
  

闽ICP备14008679号