我可能会忽略一些基本的东西,但请考虑以下这个解释器的会话:
>>> -0.0 is 0.0
False
>>> 0.0 is 0.0
True
>>> -0.0 # The sign is even retained in the output. Why?
-0.0
>>>
你或许会认为 Python 解释器会意识到 -0.0
和 0.0
是同一个数字。实际上,它将它们视为相等:
>>> -0.0 == 0.0
True
>>>
那么为什么Python要区分这两种情况并生成一个全新的对象来表示“-0.0”?对于整数,它并不会这样做:
>>> -0 is 0
True
>>> -0 # Sign is not retained
0
>>>
现在,我意识到浮点数是计算机中的一个巨大问题,但这些问题都与它们的准确性有关。例如:
>>> 1.3 + 0.1
1.4000000000000001
>>>
但这不是一个精度问题,对吧? 我的意思是,我们在谈论数字的符号,而不是它的小数位。
1我可以在Python 2.7和Python 3.4中重现此行为,因此这不是一个特定于版本的问题。
is
? 你的问题与有符号零无关:尝试x = 2.3
,y = 2.3
,然后执行x is y
。 然后,只是为了好玩,尝试x = 2.3; y = 2.3
(一行内),然后执行x is y
。 - Mark Dickinsonx = 2; y = 2
和x is y
,您将看到True
。尝试x=-240000; y=-240000
然后x is y
,您将看到False
。希望这可以帮助下一个访问者! - Mike Williamson