尝试:
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)]在win32系统上:
28901952 28901952 True
28901952 28901952 True
28901952 28903248 False
Python 3.6.1的运行结果(版本号v3.6.1,发布日期为2017年3月21日,编译器为MSC v.1900 64位(AMD64)):
408502020664 408502020664 True
408502020664 408502020664 True
408502020664 408502019104 False
结果('2.7.13(默认,Jun 26 2017,10:20:05)\n [GCC 7.1.1 20170622(Red Hat 7.1.1-3)] ',sys.version_info(major = 2,minor = 7,micro = 13,releaselevel ='final',serial = 0)):
(140026865510064, 140026865510064, True)
(140026865510064, 140026865510064, True)
(140026865510064, 140026865509968, False)
为什么浮点数的ID是相同的? 在背后发生了什么(类似于保留整数对象的范围为-5到256)?