Python循环中列表追加异常:matrix_of_ones结果不符预期求助
问题原因分析
核心问题是Python中列表属于可变对象,你在循环里反复修改并添加同一个inner_matrix的引用到matrix_of_ones中。
具体过程是:
- 你初始化了一个
inner_matrix列表,所有后续操作都是在这个列表的内存地址上修改内容 - 每次循环把
inner_matrix添加到matrix_of_ones时,并没有复制新的列表,只是把这个列表的引用存了进去 - 循环结束后,
matrix_of_ones里的所有元素都指向同一个内存地址的列表,所以最终所有行都会是最后一次修改后的inner_matrix状态,和预期的逐行不同的矩阵不符
解决方法
每次循环都创建一个新的inner_matrix,避免复用同一个列表引用:
# 错误写法(复用同一个列表) matrix_of_ones = [] inner_matrix = [0,0,0] for i in range(3): inner_matrix[0] = i matrix_of_ones.append(inner_matrix) # 正确写法(每次循环新建列表) matrix_of_ones = [] for i in range(3): inner_matrix = [i, 0, 0] # 每次循环创建全新列表 matrix_of_ones.append(inner_matrix)
也可以用列表推导式更简洁地实现:
matrix_of_ones = [[i, 0, 0] for i in range(3)]
内容的提问来源于stack exchange,提问作者Mick G
相关产品推荐
相关产品推荐

