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

Python整数内存管理解析:为何两示例is判断结果不同?

整数对象is比较的差异解释

先看两个示例的运行结果:

示例1

a = 845
b = int("8"+"4"+"5")

print(a == b) # True
print(a is b) # False

示例2

a = 845
b = 840+5

print(a == b) # True
print(a is b) # True

差异原因拆解

  1. ==和is的本质区别

    • ==仅判断两个对象的值是否相等,所以两个示例的这一结果都是True,逻辑完全合理。
    • is是判断两个变量是否指向同一内存地址的对象,这才是差异产生的核心。
  2. Python的编译优化与整数缓存规则

    • Python为提升性能,会对**-5到256之间的小整数**做缓存,程序中用到该范围的整数时,都会复用同一个对象。但超出这个范围的整数,默认不会缓存——不过有个例外:如果是编译阶段就能确定的整数常量(比如示例2里的840+5),解释器会直接计算出结果845,并让b和a指向同一个对象,所以is返回True。
    • 示例1里的int("8"+"4"+"5")是运行时动态生成的整数:字符串拼接和转整数的操作只有在程序运行时才会执行,这个过程会新创建一个值为845的整数对象,和之前a=845指向的对象不是同一个,所以is返回False。

简单总结:编译期能确定的整数常量会复用对象,运行时动态生成的整数(哪怕值相同)会创建新对象,超出小整数缓存范围时就会出现这种地址不同的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:27:04