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

为何Python中列表与整数的id表现存在差异?

为什么Python中列表和整数的id()结果表现不同?

这是Python对不可变对象的缓存机制与可变对象的创建逻辑差异导致的,具体原因如下:

1. 整数的情况:小整数缓存复用

Python为了优化性能,会对范围在[-5, 256]之间的小整数提前创建好对象并缓存起来。程序运行过程中,只要用到这个范围内的整数,都会直接复用缓存里的对象,不会重新创建。

所以当你执行:

a = 1
print(id(a))
print(id(1))

两次id()指向的是同一个缓存的整数对象,结果自然相同。

2. 列表的情况:可变对象每次创建新实例

列表是可变对象,Python不会对列表做缓存优化。每次写出[1,2]这样的字面量,Python都会在内存中生成一个全新的列表实例,哪怕两个列表的元素完全一致,它们也是独立的对象。

所以执行:

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

第一个id()指向的是赋值给a的那个列表实例,第二个id()指向的是新创建的另一个列表实例,两者的内存地址自然不同。

你可以通过is运算符验证对象是否为同一个:

a = [1,2]
b = [1,2]
print(a is b)  # 输出False,说明不是同一个对象

c = 1
d = 1
print(c is d)  # 输出True,说明是同一个对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:15:38