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

Python浅拷贝中值与引用的差异问题

问题解析:Python列表切片复制的深浅差异

先看执行的代码及对应结果:

第一步执行代码

x = [1,2,3,[4,5,6]]
y = x[:]

x[3][0] = 9

此时结果:

x = [1,2,3,[9,5,6]]
y = [1,2,3,[9,5,6]]

第二步执行代码

x[0] = 99

此时结果:

x = [99,2,3,[9,5,6]]
y = [1,2,3,[9,5,6]]

问题

为何修改嵌套列表中的元素时,x和y均会同步变化,而修改外层列表的元素时仅x发生变化?


原因说明

这核心是列表切片x[:]做的是浅拷贝,得搞清楚Python里列表的存储逻辑:

  • 外层列表x里的1、2、3都是不可变的整数类型,而[4,5,6]是可变的列表对象。
  • 用y = x[:]复制时,新列表y会生成一个新的外层容器,但只是把x里每个元素的引用复制过来,并没有复制元素本身。
  • 对于外层的整数元素:因为整数不可变,修改x[0] = 99其实是给x的第一个位置换了个新整数的引用,y的第一个位置还是原来1的引用,所以y不变。
  • 对于嵌套的列表元素:x[3]和y[3]指向的是同一个列表对象,不管通过x还是y修改这个嵌套列表的元素,都是操作同一个对象,所以两者会同步变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:32:09