7

深入理解Python中的'=='与'is'操作符

 3 years ago
source link: http://developer.51cto.com/art/202012/637234.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我们都遇到过这样的情况,当我们在Python中解决一些问题时,我们必须比较两个对象。为此,我们中的许多人使用了==或is操作符。

但是,似乎我们很多人都不知道在什么情况下用哪个词。这篇文章将详细介绍二者的区别和联系,帮助大家更好地使用他们。

BzUrQj.jpg!mobile

区别分析

我们先用双胞胎猫做一些类比。假设你有一对非常相似的双胞胎猫。它们有着同样炭黑色的皮毛和同样锐利的绿色眼睛。光看,我们无法分辨哪个是哪个。

现在,将Python中的== 和 is操作符带入这个例子。

==操作符通过检查相等性进行比较。如果这两个猫是两个Python对象,那么如果使用==操作符对它们进行比较,则返回' Both cats are Equal(两只猫相等) '作为答案。

is操作符通过检查标识来进行比较。如果我们用is来比较它们,我们会得到“两只猫不相等”作为答案。

为了真正理解这一点,我们将编写一些代码。

首先,我们将创建一个名为a的列表,其中包含元素[3、4、5],另一个列表b将指向列表a。

MrAjYvj.png!mobile

让我们检查一下这两个列表。我们可以看到,他们指向外观相同的列表。

RnyiAnJ.png!mobile

因为这两个列表对象看起来相同,所以使用==操作符比较它们是否相等时将得到预期的结果。

JVbEvmU.png!mobile

然而,这并没有告诉我们a和b是否指向同一个物体。当然,我们知道它们是这样的,因为我们之前已经分配了它们,但是假设我们不知道——我们怎么知道呢?

答案是将两个变量与is操作符进行比较。这证实了两个变量实际上都指向一个列表对象。

EZZ7JnJ.png!mobile

现在,让我们使用list()创建另一个列表c,它包含列表a的元素。

aQvMJnN.png!mobile

如果我们看一下列表c,它看起来类似于由a和b指向的列表。

ZfyUjmB.png!mobile

现在,我们将使用==和is操作符比较a和c。

jYjmqiB.png!mobile

这里,==操作符为真,因为它们都有相同的内容。

77VjQvQ.png!mobile

Python告诉我们c和a指向两个不同的对象,尽管它们的内容可能是相同的。

所以,为了总结一下,让我们试着把is和==之间的区别分解成两个简短的定义。

如果两个变量指向同一个对象,则is表达式的计算结果为True。

如果变量引用的对象相等(内容相同),则==表达式计算为True。

【责任编辑:赵宁宁 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK