当我更改嵌套列表中的值时,我注意到一个奇怪的行为 grid
其初始化如下 grid = [[0]*10]*10
.
grid = [[0]*10]*10
grid[0][0] = 1
for l in grid:
print l
输出:
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
当我初始化grid
时如grid = [[0]*10 for x in range(10)]
。
它按预期工作。
grid = [[0]*10 for x in range(10)]
grid[0][0] = 1
for l in grid:
print l
输出:
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
有谁知道为什么会这样吗?
感谢您的帮助!
最佳答案
当您创建grid = [[0]*10]*10
时,您实际上是在创建对同一对象的引用数组([0 ] )。因此,当您通过一个引用更改对象时,就会更改列表中的所有条目。
对于初学者来说,这是一个非常常见的 Python“陷阱”。
关于python - 更改嵌套列表中的单个值时多个值会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42195959/