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

Python字典浅拷贝:修改列表影响原字典,字符串却不影响?

字典浅拷贝行为差异的原因

核心在于Python中可变类型和不可变类型的本质区别,以及浅拷贝的工作逻辑:

浅拷贝的本质

字典的.copy()方法做的是浅拷贝——它只会复制字典里键值对的引用关系:新字典和原字典的键会指向同一个值对象。但后续修改行为是否会同步到原字典,完全取决于值对象本身是不是可变的。

不可变类型(如字符串)的表现

像字符串、数字、元组这类不可变类型,一旦创建就无法被修改。当你执行y["string"] += " one"时,并不是在原来的"example"字符串上追加内容,而是创建了一个新的字符串对象"example one",然后把新字典y中"string"键的引用指向这个新对象。原字典x里的"string"键仍然指向原来的"example"对象,所以x不会有任何变化。

可变类型(如列表)的表现

而列表、字典这类可变类型,对象本身可以被直接修改(比如append、pop操作)。当你执行y["list"].append("one")时,是直接在x和y共同指向的同一个列表对象上做修改,所以这个变化会同时反映在x和y的列表中——因为它们的引用指向的是同一个内存里的列表。

深拷贝的作用

如果想要让新字典和原字典完全独立,不管值类型是可变还是不可变,都可以用copy.deepcopy(),它会递归复制所有层级的对象,新字典的所有值都是独立的新对象,修改其中一个不会影响另一个。

内容的提问来源于stack exchange,提问作者sdweldon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:06:58