首页 > 解决方案 > Python:'inf 是 inf',但 '-inf 不是 -inf'?

问题描述

蟒蛇 3.7

在编写最大值的搜索代码时,我遇到了负无穷大的奇怪行为。 有人可以解释为什么这种行为吗?

>>> inf = float('inf')
>>> inf is inf
True
>>> (-inf) is (-inf)
False

而且我已经意识到使用==比较更好,但我对上述问题的答案很感兴趣。

标签: pythonpython-3.xinfinity

解决方案


inf是一个变量,绑定到一个特定的对象。任何对象is本身,所以inf is inf.

-inf是一个表达式。它进行数学运算,并生成一个值浮点负无穷大的对象。Python 没有承诺 this 是否与具有该值的任何其他对象相同。在您的情况下,两个评估-inf碰巧产生了不同的对象。

同样,没有关于会产生什么的承诺。-inf is -inf当前的 CPython 实现恰好始终产生 False。PyPy 的原始处理产生 True。不同的 Python 版本或实现可能会根据当前的内存压力不一致地生成 True 或 False,或者您是否将其作为脚本运行或以交互方式运行,或任何其他因素。CPython 本身已经存在对象标识在脚本中或交互方式中不同的情况;例如,这个:

x = 1000
y = 1000
print(x is y)

根据您是否以交互方式运行它,在当前 CPython 实现中打印不同的东西。


推荐阅读