Python 中 "==" 和 "is" 运算符的区别

2024 年 8 月 29 日 | 阅读 3 分钟

在 Python 中,身份运算符 (is) 经常被用在应该使用相等运算符 == 来比较对象的地方。实际上,在尝试比较数据时使用 is 很少是一个好主意。身份运算符 (is) 和相等运算符 (==) 在 Python 中略有不同。当我们使用 Py is 运算符比较数字时,我们的代码可能运行正常,直到出现问题。据报道,Python 的 is 运算符比 == 运算符更快,或者我们可以认为它看起来更 Pythonic。重要的是要记住,这些运算符不一定以相同的方式起作用。

什么是 == 运算符?

Python 的相等运算符 (==) 用于根据值比较对象。它会在左侧对象上调用 __eq__() 类函数,该函数描述了判断相等的标准。但通常,这些限制被表述为,如果两个对象具有相同的值,则相等运算符 == 返回 True,如果它们具有不同的值,则返回 False。而 == 运算符比较两个对象的数值,is 运算符则检查两个对象的身份。相等和相同的含义并不相同。在尝试理解 Python 的 is 和 == 比较运算符的行为时,这种区别至关重要。

Python 的 is 运算符用于确定两个或多个变量是否指向同一个内存项,而 == 运算符则比较两个对象的数值和相等性。这意味着,除非我们将 None 进行比较,否则几乎应该始终使用相等运算符 == 和 !=。每当两个算术运算的值相等时,就会使用 == 运算符,从而使条件为真。

什么是 'is' 运算符?

使用 Python 中的身份运算符 (is, is not),我们可以比较对象。如果运算符两侧的变量精确地指向同一个对象,则 is 运算符的计算结果为 True。否则,它将给出错误的评估。当运算符两侧的变量指向完全相同的对象时,is 运算符的计算结果为 True。否则,它会给出错误的评估。要确定两个或多个变量是否属于同一个对象,请使用 "is" 关键字。如果两个变量是同一个对象的一部分,则返回 TRUE,否则返回 FALSE。只有当变量被赋予了某些值后,"is" 运算符才能正常工作。考虑以下示例,其中包含两个空列表。在 Python 中,这两个不同的列表将分别指向具有唯一内存位置的不同对象。

在比较两个对象的身份时,我们使用 is 运算符。但是,如果我们想比较两个对象的值,我们使用 == 运算符。在尝试理解 Python 中 == 运算符的应用和行为时,必须考虑“相同”和“相等”定义之间的区别。在本文中,我们将讨论 Python 中的 == 和 "is" 运算符之间的区别。

为了进一步理解这一点,让我们看一个例子

输出

['a', 'b', 'c'] ['a', 'b', 'c'] ['a', 'b', 'c']

输出

True
True

这种情况会发生,因为列表 1、2 和 3 的值是相等的,这使得条件为真。

输出

True
False

在这里,我们可以看到语句 (list 4 is list 6) 为 False,因为 list 4 和 list 6 指向两个不同的对象,即使它们都包含相同的信息。这使我们得出结论:“is”会在两个变量指向完全相同的对象时返回 True,而 "==" 会在所引用对象的可用变量相等时返回 True。

当两个操作数的值几乎相同时,Python 中会使用 == 运算符。在这种情况下,情况将变为真实。当运算符两侧的变量指向完全相同的对象时,is 运算符的计算结果为 True。否则,它会给出错误的评估。