首页 > 解决方案 > 在 Python 中为 2D 矩阵赋值的行为会有所不同,具体取决于它的初始化方式

问题描述

我在 Python3 代码块中有一个二维矩阵,其输出如下所示:

[
 [0, 0, 0, 0],
 [0, 0, 0, 0]
]

初始化它的代码就像这样:

mat = [[0] * col] * row

其中,col = 2,row = 4

现在,有一个循环应该根据索引更新值:

for i in range(len(mat)):
    for j in range(len(mat[0])):
        if i == 0:
            print(i, j)
            mat[i][j] = 999 

print(mat)

它打印出来:

0 0
0 1
0 2
0 3
[[999, 999, 999, 999], [999, 999, 999, 999]]

这似乎不是逻辑输出,因为我只更新索引时i = 0

此外,如果初始化代码更改为:

mat = [
 [0, 0, 0, 0],
 [0, 0, 0, 0]
]

代替:

mat = [[0] * col] * row

然后输出如预期:

[[999, 999, 999, 999], [0, 0, 0, 0]]

取决于矩阵的初始化,这种输出不一致背后的原因是什么?此外,第一个输出中的所有索引(意外的一个)如何更新到999它被明确检查的位置,i == 0并且日志也验证了这一点?

标签: pythonpython-3.xmatrixmultidimensional-array

解决方案


推荐阅读