使用“is”运算符或“==”运算符来比较Python中的两个数字是否更好?
示例:
>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False
答案 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
使用==