在Python中,数字比较用"is"还是"=="更好?
在Python中,比较两个数字时,使用“is”运算符还是“==”运算符更好呢?
举个例子:
>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False
6 个回答
20
>>> a = 255556
>>> a == 255556
True
>>> a is 255556
False
我觉得这个应该能解答你的问题 ;-)
原因是一些常用的对象,比如布尔值 True 和 False,所有单字符的字符串,以及短数字,都是由解释器一次性分配的,每个包含这些对象的变量都指向同一个地方。而其他的数字和较长的字符串则是根据需要分配的。比如说 255556 这个数字,它会被分配三次,每次创建不同的对象。因此,根据 is
的判断,它们不是同一个对象。
33
其他人已经回答了你的问题,但我想再详细讲讲:
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
)。
119
使用 ==
。
有时候,在某些Python的实现中,偶尔会发现-5到256之间的整数可以用 is
来比较(比如在CPython的实现中)。但是,不要依赖这个,也不要在实际的程序中使用它。