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

Python变量赋值与引用疑问:整数与浮点数'is'判断结果为何不同?

为什么Python中整数1的两个变量用is判断为True,而浮点数1.的两个变量却为False?

这事儿本质是Python的小整数缓存机制在起作用,而浮点数并没有这套优化策略,所以才会出现两种截然不同的结果。

先说说整数的情况:

  • Python为了提升性能,会提前把**常用的小整数(默认范围是-5到256)**创建好,放在一个专门的缓存池里。
  • 当你执行a = 1和b = 1时,这两个变量其实都指向了缓存池里同一个整数对象,而不是各自新建一个。
  • 因为is运算符判断的是两个变量是否指向同一个内存地址的对象,所以a is b会返回True。

你可以用id()函数验证一下,会发现两个变量的内存地址完全相同:

a = 1
b = 1
print(id(a))  # 输出某个内存地址
print(id(b))  # 和上面的地址一模一样
print(a is b) # True

再看浮点数的情况:

  • 浮点数没有类似的缓存机制,每次你赋值1.的时候,Python都会在内存中新建一个float对象。
  • 这时候a和b指向的是两个不同的内存地址,所以a is b自然返回False。

同样用id()验证:

a = 1.
b = 1.
print(id(a))  # 一个地址
print(id(b))  # 另一个不同的地址
print(a is b) # False

额外补充一点:如果整数超出了小整数的缓存范围,结果也会和浮点数一样。比如:

a = 257
b = 257
print(a is b) # False(标准CPython环境下)

你之前预期两个判断都是False,是默认认为每次赋值都会新建对象,这其实是大部分情况的逻辑,但Python对高频使用的小整数做了特殊优化,才产生了这个例外~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:00:13