![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=1739289815-pKRVKmYdtk6rxy7ig1zy24iEYDNCkcfq-0-4315d0ac66c0af52a16802c1ea88efd7)
↑扫码看视频
身份运算符的功能是比较两个变量是否属于同一个对象。初学者需要注意,身份运算符的功能和使用比较运算符中的“==”来比较两个对象的值是否相等是有所区别。在本节中,将详细讲解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=1739289815-ybpUn7GXngrpf8DUQrdNjC9G492Pg4sJ-0-aedd32e64ac3a591ae81acd0ea52f5cb)
执行上述代码后输出的结果如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/65_04.jpg?sign=1739289815-hYRccnEq3IIUWe1jkw9ugH1eHnS7dIRS-0-131de431b7dcbfa287d94e1d8fe54aa9)
这是因为变量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=1739289815-hYkQwthcS3iE69Z8HItgxGloLQbP1Vyz-0-5991f9a7f3de7a00c48b250895451489)
实例文件shenfen.py的具体实现代码如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_01.jpg?sign=1739289815-dy5nie9kPz7TQENAcYnTfg2ug0fLAqt2-0-9456d615f6dceacbf945e0cc1d5c73db)
执行后输出的结果如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_02.jpg?sign=1739289815-EtmWQ5OM2M1SrtLtvrJKcql3YOCtM2Zn-0-778e00d320410701b88d839e8e0e268e)
4.8.2 is运算符和==运算符的区别
==是比较操作符,用来比较判断两个对象的value(值)是否相等。例如在下面的代码中对两个字符串进行了比较。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_03.jpg?sign=1739289815-U4MlhDbXwEmiYbKQ0C4yQj6eDDa0zjLb-0-9d9874870f3ae3bbc605a19e22b71e3d)
身份运算符is也被叫作同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个列表的比较,读者就会明白is同一性运算符的工作原理。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_04.jpg?sign=1739289815-bx5SgbT4uy1nwTC3pL3nWljiRizenVjL-0-e5ba34c0bacea4c716f9f3e8821e6d59)
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/67_01.jpg?sign=1739289815-NSCPVpHbrF9l0UYMnih7wRzqpjAl57Mh-0-e63d12986d85406c97b7c19cfd70fb59)
在上述代码中,为什么前3个打印输出是True,而最后一个是False呢?因为x、y和z的值是相同的,所以前2个是True没有问题。至于最后一个为什么是False,看看3个对象的id分别是什么就会明白了。
因此,我们可以总结出如下两个结论。
● ==比较操作符:比较两个对象是否相等,value作为判断依据。
● is同一性运算符:比较判断两个对象是否相同,id作为判断依据。