gpt4 book ai didi

python - 更改嵌套列表中的单个值时多个值会发生变化

转载 作者:行者123 更新时间:2023-12-01 03:18:49 25 4
gpt4 key购买 nike

当我更改嵌套列表中的值时,我注意到一个奇怪的行为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com