首页 > 解决方案 > Python3 对多维列表的布尔赋值是错误的?

问题描述

尝试在下面做

visited = [[False] * 3]* 3
print(visited)
visited[0][0] = True
print(visited)

为什么会这样打印:

[[False, False, False], [False, False, False], [False, False, False]]
[[True, False, False], [True, False, False], [True, False, False]]

不应该是:

   [[False, False, False], [False, False, False], [False, False, False]]
    [[True, False, False], [False, False, False], [False, False, False]]

标签: python-3.xbooleanvariable-assignment

解决方案


使用 创建二维数组 arr = [something * m]*n时,所有子数组都指向相同的内存位置。如果您修改一个子数组,所有其他子数组都会被修改。
初始化二维矩阵的正确方法是
arr = [[something for i in range(m)] for j in range(n)]
创建一个n x m矩阵。


推荐阅读