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

Python中修改原列表时切片复制得到的列表也发生改动的原因是什么?

原因解析

你观察到的现象是Python 浅拷贝 的固有特性,具体逻辑如下:

  • a[:] 切片语法属于浅拷贝操作,只会创建一个新的外层列表对象,不会递归拷贝内部嵌套的可变子对象。
  • 执行 b = a[:] 时,新列表 b 的每个元素与原列表 a 的对应元素指向完全相同的内存对象:
    • 列表第一个元素是整数(不可变类型),直接拷贝值,两个列表的第一个元素完全独立,修改不会互相影响。
    • 列表第二个元素是嵌套列表(可变类型),浅拷贝只会复制它的内存地址引用,也就是说 a[1] 和 b[1] 指向内存中同一个嵌套列表对象。
  • 当你执行 a[1][1] = 5 时,实际修改的是两个列表共同指向的那个嵌套列表的内部值,所以通过 b 访问对应位置时,自然会返回修改后的结果。

如果需要拷贝后两个列表完全独立,修改嵌套元素互不影响,可以使用深拷贝:

import copy
a = [1, [2, 3]]
b = copy.deepcopy(a)
a[1][1] = 5
print(b) # 输出 [1, [2, 3]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:24:02