![Python语言从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/679/33643679/b_33643679.jpg)
4.8 身份运算符和身份表达式
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/65_02.jpg?sign=1739532115-QezXpIFQMLDrofmmtNPVko5wbwwdi9LJ-0-3e0c227fead3bf3742e225748a8e45c1)
↑扫码看视频
身份运算符的功能是比较两个变量是否属于同一个对象。初学者需要注意,身份运算符的功能和使用比较运算符中的“==”来比较两个对象的值是否相等是有所区别。在本节中,将详细讲解Python身份运算符和身份表达式的基本知识。
4.8.1 使用身份运算符和身份表达式
Python语言有2个身份运算符,分别是is和is not。要理解身份运算符的实现原理,需要从Python变量的属性谈起。变量有3个属性,分别是name、id和value,具体说明如下。
● name为变量名。
● id为内存地址。
● value就是变量的值。
身份运算符is是通过id来进行判断的。如果id一样就返回True,否则返回False。请看下面的演示代码。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/65_03.jpg?sign=1739532115-jYC2YnfLJpStwb3P8R5TgAeG5LERW9nD-0-125911a3e08e1cf08b8b9fe8b10da620)
执行上述代码后输出的结果如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/65_04.jpg?sign=1739532115-02rOSz0hXPC3p3ToKyQdSfmX5HQxnbjX-0-532688d80de4c04d38ed430e2c928be3)
这是因为变量a和变量b的value是一样的,用“==”比较运算符比较变量的value,所以返回True。但是当使用is的时候,比较的是id,变量a和变量b的id是不一样的(具体的id可用id()函数查看),所以返回False。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/65_05.jpg?sign=1739532115-HHEDMOL4YxHWadZ2SETJGcvFwKYEQIO2-0-a97f869b6d4666afc6a0c2a8ec5c425c)
实例文件shenfen.py的具体实现代码如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_01.jpg?sign=1739532115-ioBweHYeIdTVmi6jELKY3Dlk14uy34e8-0-ad2a3494fbdc1d1ac97943236b94f6d7)
执行后输出的结果如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_02.jpg?sign=1739532115-W1eFMtoaSwygiD88qFJVUtAkrdL37liw-0-bdf1c297d77ba1f1364be7709be4b0fd)
4.8.2 is运算符和==运算符的区别
==是比较操作符,用来比较判断两个对象的value(值)是否相等。例如在下面的代码中对两个字符串进行了比较。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_03.jpg?sign=1739532115-yD3GwIEiy9VaHaKjif0Mai14ka8kiidB-0-f30527448debb2521cee4df2652bc679)
身份运算符is也被叫作同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个列表的比较,读者就会明白is同一性运算符的工作原理。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_04.jpg?sign=1739532115-jBnHnvKPaVMEoCbD3JhSpaytPTSjT0tW-0-e597f742aaf6f55d21bb38354dc39aa9)
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/67_01.jpg?sign=1739532115-6rZ6c5plDnxF2zEQXjNBstFWyEZf4yyg-0-9d23de95ceb9bc22b415d94c6610dbd5)
在上述代码中,为什么前3个打印输出是True,而最后一个是False呢?因为x、y和z的值是相同的,所以前2个是True没有问题。至于最后一个为什么是False,看看3个对象的id分别是什么就会明白了。
因此,我们可以总结出如下两个结论。
● ==比较操作符:比较两个对象是否相等,value作为判断依据。
● is同一性运算符:比较判断两个对象是否相同,id作为判断依据。