Python嵌套字典赋值异常求助:重复引用致值覆盖
问题原因分析
你遇到的问题核心是Python中可变对象的引用传递特性:
- 你在循环外部只初始化了一次
new_dict = {},这个字典在内存中是一个固定的可变对象。 - 每次循环里你只是修改这个
new_dict的键值对,并没有创建新的字典实例。 - 执行
newest_dict[k] = new_dict时,你存入的不是当前new_dict的内容副本,而是这个字典对象的内存引用。 - 第二次循环时,你修改了同一个
new_dict的内容,由于newest_dict中的两个键指向的是同一个字典引用,最终两个子字典的内容会完全一致(都是最后一次循环修改后的结果)。
修复方案
要解决这个问题,需要确保每次循环都创建独立的字典对象,避免复用同一个引用:
newest_dict = {} row = 2 for k,v in dict.items(): # 每次循环初始化新的字典,保证每个键对应独立的子字典 new_dict = {} for i,j in v.items(): j = ws[j+str(row)].value new_dict[i] = j print(k) print(new_dict) print("------") newest_dict[k] = new_dict print(newest_dict) row += 1 print(newest_dict)
另一种可选方案是在赋值时复制当前new_dict的内容,比如使用newest_dict[k] = new_dict.copy(),但前者的逻辑更直接清晰,避免潜在的引用问题。
内容的提问来源于stack exchange,提问作者Gaurav Kelwadkar
相关产品推荐
相关产品推荐

