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

Python list索引与切片赋值的对象引用机制疑问

Python列表引用与切片运行逻辑说明

初始引用赋值的现象

最初的测试代码如下:

def func(first):
    third = first[0]
    first[0][0] = 5
    print(third)

first = [[3,4]]
func(first)
  • 最初预期输出:[3,4]
  • 实际运行输出:[5,4]
  • 逻辑说明:third = first[0]属于引用赋值,没有复制列表对象本身,third和first[0]指向内存中同一个列表实例。修改这个实例内部的元素时,所有指向该实例的变量读取到的内容都会同步更新。

切片赋值的运行差异

针对切片引用的疑问,对应测试代码如下:

def func(first):
    third = first[0][0:2]
    first[0][0] = 5
    print(third)

first = [[3,4]]
func(first)

核心结论

对列表执行切片操作会创建一个全新的列表对象,由赋值的变量独立引用。

  • 上述代码中,first[0][0:2]会生成一个新列表,存储原嵌套列表指定区间元素的副本,third指向这个独立的新列表。
  • 后续执行first[0][0] = 5修改的是原嵌套列表的元素,和切片生成的新列表没有绑定关系,因此这段代码的输出为[3,4]。

补充说明:列表切片属于浅拷贝,如果切片范围内的元素本身是可变对象(比如嵌套列表),新列表中存储的仍然是这些可变对象的引用,修改内层可变对象时两边仍会同步变化。但本案例中切片范围内的元素是整数这类不可变类型,因此不会出现联动修改的情况。

内容的提问来源于stack exchange,提问作者Tan Yong Boon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:39:20