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

对列表引用工作机制的误解:为何x[0].append(4)会影响y[0]的值

Python浅拷贝嵌套列表后修改原列表,拷贝对象同步变更的原因

该现象是copy模块的copy()方法实现浅拷贝的特性导致的,具体逻辑如下:

  • 浅拷贝只会为复合对象(如嵌套列表)创建新的外层容器,不会递归拷贝内层的子对象,拷贝后的新容器内部存储的依旧是原容器子对象的引用,新旧容器的子元素指向同一块内存地址。

代码执行过程拆解

相关测试代码:

from copy import copy

x = [[1], [2]]
y = copy(x)
x.append([3])
x[0].append(4)

print(x)
print(y)

运行输出:

>>> [[1, 4], [2], [3]]
>>> [[1, 4], [2]]

每一步操作的影响:

  1. 执行y = copy(x)时,仅创建了新的外层列表对象赋值给y,y和x的外层列表相互独立,但二者内部的两个子元素[1]、[2]指向完全相同的内存地址。
  2. 执行x.append([3])时,是在x的独立外层列表中新增元素,不会影响y的外层列表,因此最终输出的y中没有[3]元素。
  3. 执行x[0].append(4)时,操作的是x和y共享的第一个内层子列表对象,修改该对象的内容会同步反映到所有持有该引用的变量上,因此y的第一个元素也会同步变更为[1,4]。

如果要完全隔离两个嵌套列表的修改操作,可以使用copy.deepcopy()执行深拷贝,深拷贝会递归拷贝所有层级的子对象,新旧列表的所有元素都指向不同的内存地址,修改操作不会互相影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:24:04