Python二维列表字典值修改异常:单元素修改触发全矩阵更新
问题原因
你遇到的问题核心在于字典是可变对象——你循环中反复添加的都是同一个defval字典的引用,整个矩阵里的所有元素其实都指向内存中的同一个字典实例。所以只要修改任意一个元素的"val"值,所有元素的这个值都会同步变化,因为它们本质上是同一个东西。
解决方法
方法1:每次循环创建新字典
放弃复用同一个字典,在内层循环里每次都生成一个全新的字典实例:
matrix = [] for x in range(5): row = [] for i in range(5): row.append({"val": False}) matrix.append(row) matrix[3][2]["val"] = True
方法2:使用字典的copy方法
如果需要基于初始的字典模板,可以每次添加它的浅拷贝来生成新实例:
defval = {"val": False} matrix = [] for x in range(5): row = [] for i in range(5): row.append(defval.copy()) matrix.append(row) matrix[3][2]["val"] = True
内容的提问来源于stack exchange,提问作者Totallama
相关产品推荐
相关产品推荐

