分享

Python中的==与is关键字,是一样的吗

 hercules028 2022-05-01 发布于四川

双等号==运算符和is关键字是Python中比较对象的常用语句,本文将通过几个例子了解它们之间的区别。

双等号==运算符

当赋值给被比较对象的值相等时,双等号==运算符返回True==运算符在比较对象时不匹配两个对象的内存位置,因此,即使两个对象的内存位置不同但值相同,双等号运算符也将返回True。简而言之,==运算符比较对象是否相等。让我们来看一个例子。

下面定义了三个列表:car1car2car3

car1= ['Honda', 'Toyota', 'Ford']

car2= ['Ford', 'Toyota']

car3= ['Honda', 'Toyota', 'Ford']

现在,使用==运算符来比较列表car1car2,由于这两个列表包含不同的项,比较将返回False

if car1 == car2:

    print('值相等')

else:

    print('值不相等')

结果如下图1所示。

Image

1

如果比较列表car1car3

if car1 == car3:

    print('值相等')

else:

    print('值不相等')

由于这次比较中的两个列表具有完全相同的项数和类型,因此==运算符返回True

Image

2

is关键字

is关键字通过匹配两个或多个对象的内存位置来比较它们的身份。即使两个对象包含相同的项,如果对象不指向相同的内存位置,is关键字也将返回False

下面的脚本使用is关键字比较car1car3列表。回想一下,这两个列表包含相同的项。

if car1 is car3:

    print('值相等')

else:

    print('值不相等')

结果如下图3所示。

Image

3

上面的输出显示,尽管car1car3列表以相同的顺序包含相同的项,但比较结果返回False。为什么返回False?这是因为列表car1car3的存储位置不同。

通过将对象传递给id()方法,可以检查对象的内存位置。下面的脚本打印car1car3列表的内存位置。

Image

4

4中的输出显示,列表对象的内存位置确实不同。

car1列表对象赋值给car3列表对象,而不是像我们第一次定义列表时那样对列表中的项目进行硬编码,这将使car3对象指向与car1对象相同的内存位置。

car3= car1

检查这两个列表的内存位置,如下图5所示。

Image

5

从上图5的输出可以看出,现在car1car3列表都指向同一个内存位置。

现在,使用is关键字再次比较car1car3列表。

Image

6

小结

双等号==运算符匹配相等,并比较两个对象的值,而不考虑它们的内存位置。而is关键字通过比较对象的内存位置来匹配对象的标识。

注:本文学习整理自wellsr.com,供有兴趣的朋友参考。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多