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

Python中向列表追加空列表为何出现旧元素?列表引用疑问

Python列表引用机制问题解析

先还原完整操作序列:

>>> A=[]; B=[]
>>> A.append(1)
>>> A
[1]
>>> A=[]
>>> A
[]
>>> B.append(A)
>>> B
[[]]
# 继续操作
>>> A.append(1)
>>> A
[1]
>>> A=[]
>>> A
[]
>>> B.append(A)
>>> B
[[1], []]

核心原因:Python变量存的是对象引用,而非对象本身

列表是Python中的可变对象,变量名只是指向内存中对象的"指针",不是存储对象本身。一步步拆解操作:

  • 执行A=[]时,创建了第一个空列表(记为「列表X」),A指向X;A.append(1)把X改成了[1]。
  • 再次执行A=[]时,创建了第二个空列表(记为「列表Y」),此时A的指向从X切换到Y,X会被Python垃圾回收机制清理。
  • B.append(A)是把Y的引用加入B,所以B此时是[Y],打印显示[[]]。
  • 后续A.append(1)是对当前A指向的Y进行修改,Y从[]变成[1]——而B里的第一个元素就是Y的引用,所以B的第一个元素会同步变成[1]。
  • 最后一次A=[]创建了第三个空列表(记为「列表Z」),A指向Z;B.append(A)把Z的引用加入B,所以B最终是[Y, Z],对应显示[[1], []]。

对你疑问的解答:

  • 你看到的1存储在「列表Y」里,这个列表就是你第一次追加到B中的那个空列表,后来通过A的引用被修改了。
  • 第二次追加到B里的确实是空列表Z,但第一次追加的Y已经被改成了[1],所以B的结果才是[[1], []]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:39:19