代码之家  ›  专栏  ›  技术社区  ›  user98235

Python数组-更改一个值会更改多个插槽

  •  0
  • user98235  · 技术社区  · 7 年前

    为什么会发生以下情况?在这两种情况下,我们都将网格定义为3乘3的零数组,但当我们将中间值更改为2时,三个值将更改为2,而在第二种情况下,只有一个值更改为2。

    grid=[[0]*3]*3
    grid[1][1]=2
    print(grid)
    [[0, 2, 0], [0, 2, 0], [0, 2, 0]]
    
    grid=[[0 for i in range(3)] for i in range(3)] 
    grid[1][1]=2
    print(grid)
    [[0, 0, 0], [0, 2, 0], [0, 0, 0]]
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   mike.k    7 年前

    和 grid=[[0]*3]*3 方法中的所有数组 grid 保持相同的内存地址。因此,如果您更改了其中任何一个,则会为它们显示相同的输出。

    您会注意到这三个值都相同:

    id(grid[0])
    id(grid[1])
    id(grid[2])