![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=1739288117-0cZ3hOnbWZ9rDWs1kR4QuXeEbmuYOJKg-0-2a580c594dfaab9fdd8be0b3468ae23c)
↑扫码看视频
身份运算符的功能是比较两个变量是否属于同一个对象。初学者需要注意,身份运算符的功能和使用比较运算符中的“==”来比较两个对象的值是否相等是有所区别。在本节中,将详细讲解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=1739288117-tlsLcRERKEK3PILqEdEi3GnnhNcTu4WT-0-804b8559ac912e1f2cc01862f0761856)
执行上述代码后输出的结果如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/65_04.jpg?sign=1739288117-jna3WSTgkA9yonG8vRgHLfNb82MUELdz-0-4675ff8fbda33bdef2ba83206e7513b0)
这是因为变量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=1739288117-2Z5H4y0x931c3EvfkDNsugqy2mwRDdQC-0-5117aaf00c2a52b2080d6ff430c9feba)
实例文件shenfen.py的具体实现代码如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_01.jpg?sign=1739288117-xhJjEj6DXeIz9XMOmnqhAMn0ufsQwnqr-0-b761e104002fd06970f8229ca55256ec)
执行后输出的结果如下所示。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_02.jpg?sign=1739288117-Qy6mIlweRFxfoQm5VYDxGuAfadIppOHK-0-a60d51455cb806eefc39ae322f9835e2)
4.8.2 is运算符和==运算符的区别
==是比较操作符,用来比较判断两个对象的value(值)是否相等。例如在下面的代码中对两个字符串进行了比较。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_03.jpg?sign=1739288117-CY8i8OLTdzKMZbboIpbs36nBOttHkAka-0-fc1785836a9c4c6a2ab16f4788fdbdba)
身份运算符is也被叫作同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个列表的比较,读者就会明白is同一性运算符的工作原理。
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/66_04.jpg?sign=1739288117-rAFt1Gkl3V56u8yMq1mibjTm2l6Py5eD-0-69e2afe46d2a51ff1822a9285ea0e16c)
![](https://epubservercos.yuewen.com/985AB7/17977545508664106/epubprivate/OEBPS/Images/67_01.jpg?sign=1739288117-qrqK91VhhFNrm7ok1iA8svs7YrQdA15Z-0-61ee1639f8a980c79e4ade3a7d2846fc)
在上述代码中,为什么前3个打印输出是True,而最后一个是False呢?因为x、y和z的值是相同的,所以前2个是True没有问题。至于最后一个为什么是False,看看3个对象的id分别是什么就会明白了。
因此,我们可以总结出如下两个结论。
● ==比较操作符:比较两个对象是否相等,value作为判断依据。
● is同一性运算符:比较判断两个对象是否相同,id作为判断依据。