Python循环赋值嵌套字典时所有条目值相同的原因及解决方法
问题解答
为什么所有值都相同
Python中的字典属于可变对象,你代码中的updated_payload = payload并没有生成新的字典,只是给同一个内存地址的原始payload对象加了一个新的别名引用。你每次循环修改StartIndex属性时,实际修改的都是同一个payload对象,而字典x中存储的三个值全部指向该对象的内存地址,所以最终所有条目都会显示最后一次修改的数值3。
修正方案
因为你的payload是多层嵌套的字典结构,需要用深拷贝生成完全独立的新字典,避免引用共享问题,修改后的代码如下:
import copy start = 1 for i in range(3): # 每次循环生成独立的深拷贝对象 updated_payload = copy.deepcopy(payload) updated_payload["params"]["dsoJsonData"]["ReadMap"]["Some"]["StartIndex"] = start x[i] = updated_payload start += 1
补充说明
- 如果你的payload是单层字典结构,也可以用
updated_payload = payload.copy()做浅拷贝,性能更高;但多层嵌套场景必须用深拷贝才能保证内层字典完全独立 - 深拷贝不会修改原始payload的值,不会影响其他引用该变量的业务逻辑
内容的提问来源于stack exchange,提问作者user2896120
相关产品推荐
相关产品推荐

