Python实现两个3x3矩阵求和函数结果异常原因咨询
3x3矩阵求和赋值全列表同步修改问题原因
核心问题原因
问题出在结果矩阵的初始化写法:
sum_of_a_b = [[0] * 3] * 3
Python中用*对列表做乘法复制时,如果被复制的元素是可变对象(比如列表),复制的是对象的内存引用,而不是创建全新的独立对象。这行代码执行后,sum_of_a_b里的3个子列表本质是同一个列表对象的3个别名,指向同一块内存地址,修改任意一个子列表的元素,所有子列表的对应位置都会同步变化。
你可以用简单代码验证这个逻辑:
test = [[0]*3]*3 test[0][0] = 99 print(test) # 输出结果为 [[99, 0, 0], [99, 0, 0], [99, 0, 0]]
和你遇到的现象完全一致。
修复方案
改用列表推导式初始化结果矩阵,确保每个子列表都是独立的新对象:
sum_of_a_b = [[0 for _ in range(3)] for _ in range(3)]
也可以直接在循环计算时生成新矩阵:
sum_of_a_b = [] for i in range(3): row = [] for j in range(3): row.append(matrix_a[i][j] + matrix_b[i][j]) sum_of_a_b.append(row)
修改后再执行赋值操作,就只会修改指定i,j位置的元素,不会影响其他子列表。
内容的提问来源于stack exchange,提问作者user14994313
相关产品推荐
相关产品推荐

