【问题标题】:Multiple values change when changing a single value in a nested list [duplicate]更改嵌套列表中的单个值时更改多个值[重复]
【发布时间】:2017-02-13 02:53:05
【问题描述】:

当我更改嵌套列表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]

有人知道为什么会这样吗?

感谢您的帮助!

【问题讨论】:

    标签: python python-2.7 list nested-lists


    【解决方案1】:

    当您创建grid = [[0]*10]*10 时,您实际上是在创建一个对同一对象 的引用数组([0] 的列表)。因此,当您通过一个引用更改对象时,这会更改列表中的所有条目。

    对于初学者来说,这是一个非常常见的 Python 问题。

    【讨论】:

    • 是的@Andrew 是正确的。 # 解释 grid = [[0]*10]*10 # 这里发起一个列表并赋值给网格 grid = [[0]*10 for x in range(10)] # 这里构造一个列表并赋值给网格
    猜你喜欢
    • 2021-06-17
    • 2015-05-03
    • 1970-01-01
    • 2013-09-27
    • 2014-06-23
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多