当2*2的输出矩阵初始化为零并分配了输出时,为什么python程序为2*2的矩阵加法为两行提供相同的输出?

当2*2的输出矩阵初始化为零并分配了输出时,为什么python程序为2*2的矩阵加法为两行提供相同的输出?,python,matrix,Python,Matrix,在下面的Python程序中,当矩阵为0matrix3=[[0]*col]*行并为矩阵赋值时,用于矩阵相加2*2的Python程序为两行提供相同的输出(错误)。为追加操作提供正确的输出 row = int(input("Enter the number of rows:")) col = int(input("Enter the number of columns:")) matrix1 = [] for i in range(row): a1 =[] for j in rang

在下面的Python程序中,当矩阵为0
matrix3=[[0]*col]*行
并为矩阵赋值时,用于矩阵相加2*2的Python程序为两行提供相同的输出(错误)。为追加操作提供正确的输出

row = int(input("Enter the number of rows:"))
col = int(input("Enter the number of columns:"))
matrix1 = []

for i in range(row):
    a1 =[]
    for j in range(col):      
         a1.append(int(input()))
    matrix1.append(a1)

print("1st matrix")
for i in range(row):
    for j in range(col):
        print(matrix1[i][j], end = " ")
    print()

print("Enter Elements of 2nd Matrix")
matrix2=[]
for i in range(row):
    a2 =[]
    for j in range(col):      
         a2.append(int(input()))
    matrix2.append(a2)

print("2nd matrix")
for i in range(row):
    for j in range(col):
        print(matrix2[i][j], end = " ")
    print()

matrix3=[[0]*col]*row

print("additing matrices:")

'''
#Give Correct output
for i in range(row):
   matrix3.append([])
   for j in range(col):
       matrix3[i].append(matrix1[i][j]+matrix2[i][j])
'''

#Give Wrong Output for 2*2 matrix with both rows as same 
for i in range(row):
   for j in range(col):
       matrix3[i][j]=matrix1[i][j]+matrix2[i][j]

for i in range(row):
    for j in range(col):
        print(matrix3[i][j], end = " ")
    print()
代码的输出


在矩阵计算部分试试这个

matrix3 = []
for i in range(row):
   temp = []
   for j in range(col):
       temp.append(matrix1[i][j] + matrix2[i][j])
   matrix3.append(temp) 
更新: 尝试将matrix3变量声明为

matrix3 = [[0]*col for _ in range(row)]
它很好用

matrix3 = [[0]*col]*row

在这里,
matrix3[0]
matrix3[1]
这两个具有相同引用的嵌套列表,您可以检查引用
id(matrix3[0])
,这意味着如果您更改
matrix3[0]
它将更改
matrix3[1]

请参见我知道这一点(代码写在注释部分)。但我想知道为什么“matrix3[i][j]=matrix1[i][j]+matrix2[i][j]”不起作用。因为我是老师,我需要解释。正如上面的评论,这是创建一个相同列表的引用。