2x9矩阵修改第一行时两行同时变更问题排查
问题原因
该问题几乎都是由矩阵初始化时使用了浅拷贝,导致两行指向同一个列表对象导致的。
- 常见错误初始化写法
你大概率是用了类似下面的方式初始化2x9矩阵:
# 错误示例1 memoria_cache = [[None] * 9] * 2 # 错误示例2 base_row = [None] *9 memoria_cache = [base_row, base_row]
以上写法生成的矩阵,memoria_cache[0] 和 memoria_cache[1] 是同一个列表的引用,修改任意一行的元素,另一行都会同步变更,和你遇到的现象完全吻合。
- 修复方案
改用列表推导式初始化矩阵,保证每一行都是独立的列表对象即可:
memoria_cache = [[None] * 9 for _ in range(2)]
- 验证方法
你可以在修改矩阵前执行以下代码确认问题:
print(id(memoria_cache[0]) == id(memoria_cache[1]))
如果输出为True,就可以完全确认是浅拷贝导致的引用重复问题。
内容的提问来源于stack exchange,提问作者Victor Oliveira
相关产品推荐
相关产品推荐

