Python修改字典副本时原数据同步变动的原因及解决方案
问题根源
你当前使用的dict(request.data.copy())属于浅拷贝,仅会复制字典的最外层结构,字典内部嵌套的可变对象(子字典、列表等)仍然和原对象共享内存地址。你修改reserve_data中嵌套的子字典时,initial_data中对应的嵌套对象会同步变动,所以才会出现你没有主动修改initial_data但它的值发生变化的情况。
解决方法
使用Python标准库copy中的deepcopy方法完成深拷贝,递归复制所有层级的可变对象,让initial_data和reserve_data完全独立:
import copy # 将原有浅拷贝替换为深拷贝 initial_data = copy.deepcopy(request.data) reserve_data = copy.deepcopy(request.data) # 后续原有逻辑保持不变 print(initial_data) for key in initial_data.keys(): merchant_data = initial_data.get(key) for sub_key in merchant_data.keys(): if sub_key in keys_to_change: reserve_data[key].pop(sub_key) reserve_data[key][values_to_change.get(sub_key)] = merchant_data.get(sub_key) print(initial_data)
修改后操作reserve_data不会再影响initial_data的取值。
内容的提问来源于stack exchange,提问作者million
相关产品推荐
相关产品推荐

