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

Python用切片复制嵌套列表后修改副本为何会改变原列表?

问题原因

Python的切片操作执行的是浅拷贝,对于嵌套列表这类包含可变子元素的结构,浅拷贝仅会创建新的外层列表容器,容器内存储的所有子元素仍然是原列表子元素的引用,没有生成独立的新子元素。

你的案例中b1 = a1[:]执行后:

  • 外层的b1是和a1独立的新列表对象,如果你直接修改外层元素比如执行b1[0] = ['X', 'Y'],不会影响原列表a1
  • 但b1[0]、b1[1]两个子列表和a1[0]、a1[1]指向完全相同的内存地址,修改子列表内部的元素时,两个列表会同步发生变化。

你可以通过打印内存地址验证该结论:

print(id(a1[1]) == id(b1[1])) # 输出为True,证明二者指向同一个子列表对象

解决方案

如果要实现修改拷贝完全不影响原列表,需要执行深拷贝,递归复制所有层级的可变对象:

import copy
a1 = [['H', 'T'], ['T', 'T']]
b1 = copy.deepcopy(a1)
b1[1][1] = 'H'
print(a1) # 输出 [['H', 'T'], ['T', 'T']],原列表不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:09