为什么 print(2 == 2.) returns 在 Python 中为真

why print(2 == 2.) returns True in Python

为什么print(2 == 2.)returnsTrue

据我了解,2 是整数,2.0 是浮点数。它们在内存中的存储方式不同。

我认为它正在返回 True 因为它们都属于同一个 class 即 integer class?

我遇到过类似的堆栈溢出问题,但我仍然不清楚概念。有人可以解释一下吗?

这取决于python如何实现float和int之间的相等运算符。我想在这种情况下,在执行引擎盖下的比较之前,将 int 强制转换为 float。

内存表示实际上与它没有任何关系(或者至少,它不会阻止某些整数与等效实数进行比较)。

2 == 2.int.__eq__(2, 2.) 实现,它被定义为通过进行适当的类型转换来处理 integer/float 比较。由于 int 是比 float 更“窄”的类型,因此 2 首先转换为浮点值。 (作为一个实现细节,我怀疑这是通过 int.__eq__ 调用 float.__eq__(2., 2) 完成的,并且转换在那里完成,而不是 int 类型知道关于浮点值如何转换的任何特定细节表示。)

请注意,并非 每个 int 都可以精确表示为浮点值,因为 int 使用任意精度,但 float是固定的。例如,在我的机器上

>>> 2000000000000000000000000000000000 == 2000000000000000000000000000000000.
False

(我复制粘贴了整数以生成浮点文字,因此 0 排成一行。)