
4.8 身份运算符和身份表达式

↑扫码看视频
身份运算符的功能是比较两个变量是否属于同一个对象。初学者需要注意,身份运算符的功能和使用比较运算符中的“==”来比较两个对象的值是否相等是有所区别。在本节中,将详细讲解Python身份运算符和身份表达式的基本知识。
4.8.1 使用身份运算符和身份表达式
Python语言有2个身份运算符,分别是is和is not。要理解身份运算符的实现原理,需要从Python变量的属性谈起。变量有3个属性,分别是name、id和value,具体说明如下。
● name为变量名。
● id为内存地址。
● value就是变量的值。
身份运算符is是通过id来进行判断的。如果id一样就返回True,否则返回False。请看下面的演示代码。

执行上述代码后输出的结果如下所示。

这是因为变量a和变量b的value是一样的,用“==”比较运算符比较变量的value,所以返回True。但是当使用is的时候,比较的是id,变量a和变量b的id是不一样的(具体的id可用id()函数查看),所以返回False。

实例文件shenfen.py的具体实现代码如下所示。

执行后输出的结果如下所示。

4.8.2 is运算符和==运算符的区别
==是比较操作符,用来比较判断两个对象的value(值)是否相等。例如在下面的代码中对两个字符串进行了比较。

身份运算符is也被叫作同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个列表的比较,读者就会明白is同一性运算符的工作原理。


在上述代码中,为什么前3个打印输出是True,而最后一个是False呢?因为x、y和z的值是相同的,所以前2个是True没有问题。至于最后一个为什么是False,看看3个对象的id分别是什么就会明白了。
因此,我们可以总结出如下两个结论。
● ==比较操作符:比较两个对象是否相等,value作为判断依据。
● is同一性运算符:比较判断两个对象是否相同,id作为判断依据。