【发布时间】:2018-07-05 17:35:01
【问题描述】:
试试:
f1 = 2.0
f2 = 2.0
print (id(f1), id(f2), id(f1) == id(f2))
f1 = 2.0
f2 = 2.00
print (id(f1), id(f2), id(f1) == id(f2))
f1 = 2.0
f2 = 2.0 + 0
print (id(f1), id(f2), id(f1) == id(f2))
结果 Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32:
28901952 28901952 True
28901952 28901952 True
28901952 28903248 False
结果 Python 3.6.1(v3.6.1:69c0db5,2017 年 3 月 21 日,18:41:36)[MSC v.1900 64 位(AMD64)]:
408502020664 408502020664 True
408502020664 408502020664 True
408502020664 408502019104 False
结果 ('2.7.13 ('2.7.13 (default, Jun 26 2017, 10:20:05)) \n[GCC 7.1.1 20170622 (Red Hat 7.1.1-3)]', sys.version_info(major=2,次要=7,微型=13,发布级别='最终',串行=0)):
(140026865510064, 140026865510064, True)
(140026865510064, 140026865510064, True)
(140026865510064, 140026865509968, False)
为什么浮点数的 id 相同? 幕后会发生什么(比如在 -5 到 256 范围内保留的整数对象?)?
【问题讨论】:
-
你看过字节码了吗?我猜 2.0 会变成一个浮点常量,然后所有硬编码的 2.0 都会引用它。您可以尝试询问用户输入并输入 2.0,然后我敢打赌它们是不同的 id。
-
这显然是依赖于实现的,我的机器上带有 Py 2 和 Py 3 的所有 3 个都得到
False -
@Coldspeed 不完全是一个骗子,如果他们询问实施细节
-
所以用 python3 标记
-
而且没有重复。
标签: python python-3.x