标签:Python
双等号==运算符和is关键字是Python中比较对象的常用语句,本文将通过几个例子了解它们之间的区别。
双等号==运算符
当赋值给被比较对象的值相等时,双等号==运算符返回True。==运算符在比较对象时不匹配两个对象的内存位置,因此,即使两个对象的内存位置不同但值相同,双等号运算符也将返回True。简而言之,==运算符比较对象是否相等。让我们来看一个例子。
下面定义了三个列表:car1,car2和car3。
car1= ["Honda", "Toyota", "Ford"]
car2= ["Ford", "Toyota"]
car3= ["Honda", "Toyota", "Ford"]
现在,使用==运算符来比较列表car1和car2,由于这两个列表包含不同的项,比较将返回False。
if car1 == car2:
print("值相等")
else:
print("值不相等")
结果如下图1所示。
图1
如果比较列表car1和car3:
if car1 == car3:
print("值相等")
else:
print("值不相等")
由于这次比较中的两个列表具有完全相同的项数和类型,因此==运算符返回True。
图2
is关键字
is关键字通过匹配两个或多个对象的内存位置来比较它们的身份。即使两个对象包含相同的项,如果对象不指向相同的内存位置,is关键字也将返回False。
下面的脚本使用is关键字比较car1和car3列表。回想一下,这两个列表包含相同的项。
if car1 is car3:
print("值相等")
else:
print("值不相等")
结果如下图3所示。
图3
上面的输出显示,尽管car1和car3列表以相同的顺序包含相同的项,但比较结果返回False。为什么返回False?这是因为列表car1和car3的存储位置不同。
通过将对象传递给id()方法,可以检查对象的内存位置。下面的脚本打印car1和car3列表的内存位置。
图4
图4中的输出显示,列表对象的内存位置确实不同。
将car1列表对象赋值给car3列表对象,而不是像我们第一次定义列表时那样对列表中的项目进行硬编码,这将使car3对象指向与car1对象相同的内存位置。
car3= car1
检查这两个列表的内存位置,如下图5所示。
图5
从上图5的输出可以看出,现在car1和car3列表都指向同一个内存位置。
现在,使用is关键字再次比较car1和car3列表。
图6
小结
双等号==运算符匹配相等,并比较两个对象的值,而不考虑它们的内存位置。而is关键字通过比较对象的内存位置来匹配对象的标识。
注:本文学习整理自wellsr.com,供有兴趣的朋友参考。