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

为何修改Python字典列表中的字典时列表也会改变?

Python中可变与不可变对象的引用差异问题

代码示例1:字典修改影响列表内容

>>> y = []
>>> x = {'num':1}
>>> y.append(x)
>>> x['num']=2
>>> x['new_num']=3
>>> y
[{'num': 2, 'new_num': 3}]

问题

为何修改x时y也会发生变化?Python中的其他操作是否也存在这种逻辑?

对比示例:数值修改不影响列表内容

>>> y = []
>>> x = 1
>>> y.append(x)
>>> x += 1
>>> y
[1]

解答

核心原因是Python对可变对象和不可变对象的处理逻辑不同:

  • 字典(dict)属于可变对象,执行y.append(x)时,列表y中存储的是指向字典x的内存引用,而非字典的副本。后续修改x指向的字典内容时,列表里的引用指向的仍是同一个字典,因此y的内容会同步变化。
  • 整数(int)属于不可变对象,执行x += 1时,并非修改原有整数1,而是创建了新的整数2并让x指向它。列表y中存储的是原有整数1的引用,因此y的内容不会改变。

Python中常见的可变对象还有:列表(list)、集合(set)、自定义类实例;不可变对象还有:字符串(str)、元组(tuple)、浮点数(float)。所有涉及可变对象的引用传递场景,都会出现类似逻辑,比如:

>>> a = [1, 2]
>>> b = [a, 3]
>>> a.append(4)
>>> b
[[1, 2, 4], 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:54:18