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

Python中is not判断大于256的整数为何出现异常输出?

为什么这段Python代码用is not会有意外输出?

先看问题场景:
运行下面这段代码时,预期应该没有任何输出,但实际打印了257到259这三组数值:

for ind, elem in enumerate(range(260)):
    if ind is not elem:
        print(ind , elem)

输出结果:

257 257
258 258
259 259

而把判断条件换成!=后,代码就符合预期,没有输出:

for ind, elem in enumerate(range(260)):
    if ind != elem:
        print(ind , elem)

问题根源:is not和!=的本质区别

  • !=是值比较:只判断两个对象的数值是否相等,不管它们是不是同一个对象
  • is not是身份比较:判断两个对象在内存中是不是同一个实体(即内存地址是否相同)

整数缓存机制的影响

Python有个小整数优化策略:默认会提前创建并缓存-5到256之间的整数对象。也就是说,这个范围内的整数,不管你通过什么方式生成,拿到的都是同一个内存地址的对象。

但对于257及以上的整数,Python不会缓存,每次生成都会创建新的对象。回到代码里:

  • 当循环到0-256时,ind(enumerate生成的索引)和elem(range生成的数值)是同一个缓存对象,所以ind is elem为True,is not条件不触发,不会打印
  • 当循环到257-259时,ind和elem是两个独立创建的整数对象,内存地址不同,所以ind is not elem为True,触发打印;但它们的数值是相等的,所以!=条件不成立,不会打印

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 01:59:52