在Python中使用“is”或“==”进行数字比较是否更好?

时间:2010-02-10 19:34:10

标签: python

使用“is”运算符或“==”运算符来比较Python中的两个数字是否更好?

示例:

>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False

6 个答案:

答案 0 :(得分:81)

使用==

有时,在某些python实现中,巧合的是,从-5到256的整数将与is一起使用(例如在CPython实现中)。但不要依赖于此或在真实程序中使用它。

答案 1 :(得分:24)

其他人已经回答了你的问题,但我会详细介绍一下:

Python的is比较身份 - 它问的问题是“这一件事与其他东西实际上是同一个对象”(类似于Java中的==)。因此,有时使用is是有意义的 - 最常见的是检查None。例如,foo is None。但是,一般来说,这不是你想要的。

另一方面,

==问一个问题“这一件事在逻辑上等同于另一件事”。例如:

>>> [1, 2, 3] == [1, 2, 3]
True
>>> [1, 2, 3] is [1, 2, 3]
False

这是正确的,因为类可以定义用于测试相等性的方法:

>>> class AlwaysEqual(object):
...     def __eq__(self, other):
...         return True
...
>>> always_equal = AlwaysEqual()
>>> always_equal == 42
True
>>> always_equal == None
True

但他们无法定义用于测试身份的方法(即,他们无法覆盖is)。

答案 2 :(得分:12)

>>> a = 255556
>>> a == 255556
True
>>> a is 255556
False

我认为应该回答; - )

原因是一些经常使用的对象,例如布尔值True和False,所有单字母字符串和短号都由解释器分配一次,并且包含该对象的每个变量都引用它。其他数字和更大的字符串按需分配。例如,每次创建不同的对象时,255556被分配三次。因此,根据is,他们相同。

答案 3 :(得分:6)

这只适用于小数字,我猜它也依赖于实现。 Python对小数字使用相同的对象实例(iirc <256),但是对于更大的数字,这会改变。

>>> a = 2104214124
>>> b = 2104214124
>>> a == b
True
>>> a is b
False

因此,您应始终使用==来比较数字。

答案 4 :(得分:1)

==是你想要的,“是”恰好适用于你的例子。

答案 5 :(得分:0)

>>> 2 == 2.0
True
>>> 2 is 2.0
False

使用==