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

Python中'is'与'=='的差异及整数赋值特殊现象解惑

Python中整数赋值的is判断差异与is和==的区别

先明确is与==的核心差异

  • ==:只关心两个对象的值是否相等,它会调用对象的__eq__()方法做值的比较,只要值一致就返回True。
  • is:判断两个变量是否指向内存中的同一个对象,它比较的是对象的身份标识(可通过id()函数查看对象内存地址),只有当两个变量指向同一个实例时才返回True。

为什么256和300的is判断结果不同?

Python为了提升运行性能,内置了小整数缓存机制:它会预先创建并缓存-5到256之间的所有整数对象。当你在这个范围内创建整数变量时,Python不会每次生成新对象,而是直接返回缓存里的已有对象。

比如执行:

a = 256
b = 256

a和b指向的是缓存中同一个256对象,所以a is b返回True。

而对于超出-5~256范围的整数,Python默认不会缓存,每次赋值都会创建全新的对象。比如:

a = 300
b = 300

a和b是两个内存地址不同的300对象,所以a is b返回False。

补充验证示例

# 验证小整数缓存
a = 256
b = 256
print(id(a) == id(b))  # 输出True,说明是同一个对象
print(a is b)          # True
print(a == b)          # True

# 验证非缓存整数
a = 300
b = 300
print(id(a) == id(b))  # 输出False,说明是不同对象
print(a is b)          # False
print(a == b)          # True,值相等所以返回True

注意:在脚本文件的同一行赋值大整数时,Python解释器可能会做额外优化让它们指向同一个对象,但这属于特殊情况,不能依赖这种行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:35:35