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

为何Python Lambda函数中浮点数身份比较会出现不一致结果?

为什么Python中lambda n: n is 0.0判断0.0会返回False?

先把你遇到的代码现象再明确下:

>>> zero = lambda n: n is 0
>>> zero(0)  # 输出 True
>>> zero = lambda n: n is 0.0
>>> zero(0.0)  # 输出 False

出现这种差异的核心原因,要从两个关键细节说起:

  • is运算符的本质:它不是用来比较值是否相等的,而是判断两个变量是否指向内存中的同一个对象(可以用id()函数查看对象的内存身份标识)。如果只是想比较值是否相等,应该用==。
  • Python的对象缓存机制:
    • 对于小范围整数(通常是-5到256),Python会提前把这些整数对象缓存起来,每次使用这些整数时,都是直接复用已经存在的对象。所以不管你写多少次0,指向的都是内存里同一个对象,n is 0自然返回True。
    • 但浮点数没有这个缓存待遇,哪怕是0.0这种简单的浮点数,每次你写出0.0,Python都会在内存里创建一个全新的浮点数对象。这么一来,lambda里的0.0和你传入的参数0.0,其实是两个不同的对象,内存身份不一样,is判断自然返回False。

你可以用id()函数直观验证这个差异:

>>> id(0) == id(0)
True
>>> id(0.0) == id(0.0)
False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:47:08