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

Python列表浅拷贝疑问:修改原列表后为何新列表输出不符合预期?

为什么修改a的不同元素会对b产生不同影响?

先看你的代码:

a=[10, 23, 56, [78]]
b=list(a)
a[3][0]=95
a[1]=34
print(b)

# 输出结果:[10, 23, 56, [95]]

核心原因在于list(a)做的是浅拷贝,它对列表里的不同类型元素处理逻辑不一样:

  • 像10、23这种整数属于不可变类型,浅拷贝时会把数值直接复制一份给b对应的位置。当你把a[1]改成34,只是给a的第1个位置换了个新的整数对象,b的第1个位置还是原来的23,所以不会跟着变。
  • 而[78]这种嵌套列表属于可变类型,浅拷贝时并不会复制这个子列表的内容,只是把指向这个子列表的引用复制给b[3]。也就是说,a[3]和b[3]其实指向内存里同一个子列表。所以你修改a[3][0]的时候,是直接改了这个共享的子列表内容,b自然也会看到这个变化。

简单说:浅拷贝对不可变元素是“值复制”,对可变元素是“引用复制”,这就是两种修改产生不同结果的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:50:43