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

Python可变列表(Mutable List)与del关键字:为何删除l2后l1未被移除?

为什么执行del l2操作后,l1指向的列表对象没有被删除?

先看这段代码:

l1 = [1,2,3]
l2 = l1

l1.append(4)
l2.append(5)

print(l1) # result: [1, 2, 3, 4, 5]
print(l2) # result: [1, 2, 3, 4, 5]

这是因为列表是**可变(mutable)**对象,l1和l2其实指向内存里的同一个列表实例,所以对任意一个变量的修改都会同步影响另一个。

再看这段包含del操作的代码:

l1 = [1,2,3]
l2 = l1

l1.append(4)
l2.append(5)

del l2

print(l1) # [1, 2, 3, 4, 5]
print(l2) #  NameError: name 'l2' is not defined

核心原因在于:

  • del l2删除的只是变量名l2,而非它指向的列表对象。
  • Python采用引用计数机制管理对象生命周期:只有当一个对象的所有引用都被移除(引用计数变为0)时,垃圾回收器才会销毁这个对象。
  • 执行del l2后,列表对象还有l1这个引用指向它,引用计数不为0,所以列表会继续存在,l1依然能正常访问它。而l2作为变量名已被删除,再次访问自然会触发NameError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:45:54