Python字典copy方法疑问:修改副本后原字典为何部分值变化?
问题解析:字典拷贝后的修改差异
先看你运行的代码:
dict_c = {1: {2: 3}, 4: 5} dict_d = dict_c.copy() dict_d[4] = 9 dict_d[1][2] = 9 print(dict_c)
输出结果是:
{1: {2: 9}, 4: 5}
核心原因:字典的copy()是浅拷贝
- 对于字典里的不可变类型值(比如整数、字符串这类),浅拷贝会生成一份独立的新值存入新字典。所以修改
dict_d[4] = 9时,只是改动了dict_d里的独立值,不会影响原字典dict_c中4对应的5。 - 对于字典里的可变类型值(比如嵌套的子字典
{2:3}),浅拷贝只会复制这个子对象的引用,而非整个子对象的副本。也就是说dict_c[1]和dict_d[1]指向的是同一个子字典。所以修改dict_d[1][2] = 9时,直接改动了这个共享的子字典,原字典dict_c里的对应值自然也会跟着变化。
如果想让嵌套字典也被完全拷贝,彼此修改互不影响,需要使用深拷贝,导入copy模块的deepcopy()方法即可:
import copy dict_c = {1: {2: 3}, 4: 5} dict_d = copy.deepcopy(dict_c) dict_d[4] = 9 dict_d[1][2] = 9 print(dict_c) # 输出 {1: {2: 3}, 4: 5} print(dict_d) # 输出 {1: {2: 9}, 4: 9}
内容的提问来源于stack exchange,提问作者Junhao
相关产品推荐
相关产品推荐

