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

Python同值变量为何指向同一内存地址?含float实例疑问

问题解答

为什么浮点数案例中a is b返回True?

Python对整数的[-5, 256]驻留是明确的语言优化规则,但浮点数的对象复用没有统一的强制规范,这完全依赖于具体解释器(比如CPython)的实现和运行时优化:

  • 在你的案例中,999.99 + 0.01的计算结果恰好是1000.0,而CPython的解释器在某些场景下(比如常量表达式求值、结果为可精确表示的浮点数)会复用已存在的浮点数对象,导致a和b指向同一块内存。
  • 这种行为是不稳定且不可依赖的,换个计算方式、不同版本的Python或者其他解释器(比如PyPy),结果可能就会变成False。记住:is判断的是对象身份,而==判断的是值相等,浮点数的对象复用从来不是语言规范的一部分。

满足a==b为True但a is b为False的浮点数案例

下面是两个可靠的案例,通过不同的对象创建路径生成值相等但身份不同的浮点数:

案例1:通过字符串转换创建新对象

# 直接赋值创建浮点数对象
a = 1000.0
# 通过字符串转换生成新的浮点数对象
b = float(str(a))

print(a == b)  # 输出: True
print(a is b)  # 输出: False

案例2:通过函数返回避免常量优化

def generate_float():
    return 1000.0

a = 1000.0
b = generate_float()

print(a == b)  # 输出: True
print(a is b)  # 输出: False

补充说明

浮点数的精度问题可能干扰测试(比如0.1 + 0.2 != 0.3),所以案例中选择了可精确表示的整数型浮点数,确保a==b的结果稳定为True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:50:44