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

Python中整数与列表的is比较差异及内存分配机制问询

Python中is关键字的行为差异与内存引用机制解析

is的核心作用

is关键字的唯一作用就是比较两个变量是否指向内存中的同一个对象——也就是判断它们的引用地址是否完全一致,和变量的值没有直接关联(值相等用==判断)。

第一段代码输出True的原因

a=3
b=3
print(a is b)

Python为了提升性能,对小整数做了缓存优化(官方称为“小整数池”):默认会提前创建并缓存[-5, 256]范围内的整数对象。当你给变量赋值这个区间内的整数时,变量会直接指向缓存里的已有对象,不会重新分配内存。

所以a=3和b=3指向的是内存中同一个3对象,用is比较自然返回True。

第二段代码输出False的原因

a=[3,3]
b=[3,3]
print(a is b)

列表属于可变对象,Python对可变对象不会做缓存优化——每次执行[3,3]这样的创建操作,都会在内存中开辟新空间,生成一个全新的列表对象。

哪怕两个列表的内容完全一致,它们也是两个独立的内存对象,a和b分别指向这两个不同的对象,因此is比较返回False。

Python内存分配与引用的核心逻辑

  • Python的变量本质是“对象的引用”,而非存储值的容器:比如a=3不是把3存在a里,而是让a指向内存中那个值为3的对象。
  • 不可变对象(int、str、tuple等)因为值无法修改,Python会通过缓存优化复用对象,节省内存和创建开销;可变对象(list、dict、set等)因为值可随时修改,无法被安全复用,所以每次创建都是新对象。

官方文档说明

Python官方文档中,关于is操作符的对象身份判断、整数缓存机制的内容,可参考《Python语言参考》里的“对象身份与类型”章节,以及CPython实现细节中的小整数池说明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:10:38