我遇到了一条python列表声明。我对它的行为感到有点困惑。 有人可以解释一下。感谢您的帮助。
>>> v = [[0]*2]*2
>>> v
[[0, 0], [0, 0]]
>>> v[1][1] = 23
>>> v
[[0, 23], [0, 23]]
>>> v[1][1] = 44
>>> v
[[0, 44], [0, 44]]
>>>
答案 0 :(得分:7)
列表的*
运算符会重复其内容,您可以在输出中清楚地看到。
但是,它不会复制元素,它只是复制对象引用。所以在这种情况下,两个[0,0 ]
都有相同的底层列表对象,这应该可以解释这种现象。
要验证这一点,请尝试v[0] = [0,44]
将新的(因而独立的!)列表对象分配给主列表的第一个元素;然后重新尝试更改v[1][1]
。这次只有一个条目会在输出中发生变化。
答案 1 :(得分:0)
v只是一个列表清单。
* thing第一行意味着“在我的列表中重复2次0。”因此每个嵌套列表的大小为2并包含零。
然后,您只需将值设置为列表列表中的某些单元格:)