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

Python列表操作为何res输出为[[2,3],[2,3]]而非预期[[1,4],[2,3]]

问题原因

核心问题出在Python的列表是可变引用类型,你追加到res中的始终是同一个列表对象a的内存引用,而非a在追加时刻的内容副本。
逐行对应代码的执行逻辑:

  • 初始化空列表a和res后,第一次给a追加1、4,此时a的内容是[1,4],执行res.append(a)时,并没有把[1,4]这个值复制一份存到res里,只是把a对应的内存地址存到了res的第一个位置。
  • 调用a.clear()会直接清空这个内存地址上存储的列表内容,此时res第一个元素指向的列表也同步变成空,之前存的[1,4]没有被独立保存,已经被清空操作覆盖了。
  • 后续给a追加2、3,修改的还是同一个内存地址的列表对象,此时再执行res.append(a),相当于res的第二个位置存的也是同一个a的内存地址。这时候res里两个元素指向的是完全相同的列表对象,所以打印出来两个位置都是[2,3]。
  • 最后执行a.clear()时,res里两个元素指向的列表会同步被清空。
修正方法

每次往res追加内容时,不要直接传入原列表a,而是传入a当前内容的独立副本,常用的副本生成方式有a.copy()、切片a[:]、list(a)三种,修正后的代码如下:

a = []
res = []
a.append(1)
a.append(4)
res.append(a.copy())  # 追加独立副本,和原a对象解绑
a.clear()

a.append(2)
a.append(3)
res.append(a.copy())  # 追加第二次内容的独立副本
a.clear()
print(res)  # 执行输出为[[1, 4], [2, 3]],符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:33:29