Python如何将修改后的字典存入变量且不受原字典后续变更影响
问题原因
Python中的字典属于可变对象,你代码中dict_to_return = dictionary的操作并没有创建新的字典,只是给内存里的同一个字典对象绑定了新的变量名。因此不管通过哪个变量名修改字典内容,所有指向该对象的变量读取到的都会是修改后的值,这就是dict_save和原字典同步变更的原因。
解决方法
要保存独立的字典副本,需要显式执行拷贝操作,根据字典结构选择对应方案:
如果你使用的是单层字典,且所有值都是数字、字符串、元组这类不可变类型,用浅拷贝即可:
def increase_values(dictionary): # 调用copy方法生成原字典的浅拷贝 dict_to_return = dictionary.copy() dict_to_return[5] = 3 return dict_to_return也可以用
dict_to_return = dict(dictionary)实现同样的浅拷贝效果,注意不要用dict作为自定义变量名,否则会覆盖Python内置的dict构造函数。如果字典存在嵌套的列表、子字典等可变对象,需要用深拷贝保证完全独立:
import copy def increase_values(dictionary): # 深拷贝会递归复制所有层级的可变对象,和原字典完全无关联 dict_to_return = copy.deepcopy(dictionary) dict_to_return[5] = 3 return dict_to_return
修改后再修改原字典的值,dict_save会保留修改前的保存值,不会同步变更。
内容的提问来源于stack exchange,提问作者comhendrik
相关产品推荐
相关产品推荐

