在Python中,数字比较用"is"还是"=="更好?

81 投票
6 回答
142645 浏览
提问于 2025-04-15 19:07

在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的实现中)。但是,不要依赖这个,也不要在实际的程序中使用它。

撰写回答