You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:05:36