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

Python列表的对象ID分配问题:为何重复创建列表ID不唯一?

Python中多次创建相同内容列表为何对象ID不一致?

首先明确两个核心点:

  • 列表是可变对象,Python不会对可变对象做自动缓存复用(这和小整数、字符串常量池的机制完全不同)
  • 对象ID对应的是内存地址,当一个对象没有任何引用时,会被垃圾回收器回收,其占用的内存会被重新分配

结合你的代码和输出具体解释:

  1. 第一次执行id([1,2,3]):创建的是临时列表对象,调用id()后这个对象没有被任何变量引用,执行完这条print语句就被立刻回收,对应的内存地址140117092252416被释放。
  2. 执行a = [1,2,3]:此时创建新列表,刚好复用了刚才释放的内存地址,所以id(a)和第一次的临时列表ID完全相同。
  3. 第三次执行id([1,2,3]):因为变量a还持有之前的列表引用,那块内存地址仍被占用,Python只能分配新的内存给这个临时列表,ID自然就变了。
  4. 最后id(a)不变,是因为a一直引用着最初创建的那个列表对象,只要引用没断,它的内存地址就不会被回收复用。

简单总结:临时对象的ID重复是因为垃圾回收及时释放了内存,新对象复用了地址;而当旧对象还被引用时,新对象只能使用新的内存地址。

你的演示代码:

print('id([1, 2, 3])= ', id([1, 2, 3]))
a = [1, 2, 3]
print('a= ', a)
print('id(a)= ', id(a))
print('id([1, 2, 3])= ', id([1, 2, 3]))
print('id(a)= ', id(a))

终端输出:

id([1, 2, 3])=  140117092252416
a=  [1, 2, 3]
id(a)=  140117092252416
id([1, 2, 3])=  140117090393920
id(a)=  140117092252416

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:50:18