Python教程第21篇身份运算符最被

北京医院治酒渣鼻 https://m-mip.39.net/disease/mip_8590068.html
北京医院治酒渣鼻 https://m-mip.39.net/disease/mip_8590068.html

身份运算符可以说是Python七类运算符中最简单的一类了,相比其他六种运算符(赋值、算术、逻辑、比较、成员、位),它也是最容易被人忽略遗忘的那个。

01身份运算符功能

身份运算符的功能是判断两个对象是否同一个,就像在现实生活中判断两个名字是否是同一个人一样,比如你可能听说过“安吉拉北鼻(Angelababy)”和“杨天宝”,她们都是指教主夫人。这便是身份运算符之所以叫身份的原因——每一个对象(比如现实中的人)都有唯一的一个身份。

02身份运算符有哪些

在Python中,身份运算符与成员运算符最为相似,也只有两个,一个是is,一个与is组合的isnot,注意,是isnot,而不是notis,这点与成员运算符的notin顺序不一样。

成员运算符没有innot的用法,下面Python3.10.4的运行效果显示出这种用法是错误的:

而身份运算符没有notis的用法:

03身份运算符运算规则

和成员运算符相似的是,对于相同的操作数,is与isnot的返回值相反,这是可以理解的,因为它们本来就是互逆的一对运算,它们的运算规则如下表所示:

04什么是同一个对象

在现实生活中,判断是否是同一个人是很简单的,因为每个人都有一个唯一的身份证。你不会因为马一龙长得很像马斯克,或者By2的孙涵孙雨是双胞胎就把他(她)们当作同一个人。

同理,也不能因为两个变量的值相同,就认为它们是同一对象:

注:上面是Python3.10.4的实际运行情况,对于不同的数据赋值运算的规则有所不同,见文末。

在Python中,判断两个变量是否是同一个对象的依据是:引用的数据是不是在内存中具有相同的地址。

id函数可以返回变量在内存中的地址,下面的示例能够让大家理解什么才是同一个对象。在下面的第一个示例中,张三和李四的值不同,其内存地址不同,张三不是李四,是很好理解的;在第2个示例中,李四重新赋值与张三一样的值(张三还是原值),虽然值相同,但内存地址不同,所以张三依然不是李四;在最后一个例子中,将张三赋传值给王二,王二则指向了张三在内存中同一个数据,所以这里王二就是张三。

05如何判断两个变量的值是否相同

相比要判断两个变量是否引用的是同一对象,判断两个对象的值是否相同是更常用的功能(这也是身份运算符不受重视的原因,它的应用场景比其他运算符要小),可以使用等于比较运算符==来判断两个变量的值是否相同:

06Python对不同数据的赋值规则

对于一些很简单的数据,Python会在内存中只保留一份数据,多个变量赋值相同时都会指向这个数据。这一点与一般人认为的较大的数据只保留一份的做法正好相反。下面是两个变量赋值1的示例,可以看到内存地址相同:

下面是简单的英文字符串:

但是较大的数字有所不同:

对于汉字就像对待长数字一样,但是它对于有些英文解析就很令人费解(第一个例子中的英文长度比第三个例子中的要长,但是最长的反而和上述示例中较短的一样):

这一点Python2与Python3没有版本差异,以下是Python2.7.16运行结果:

07结语

关于身份运算符的内容就到此结束吧。关于赋值运算符的原理我现在也不太理解,太过高深的东西很难找到资料,这些教程的很多东西都是我自己领悟的。有时自己会有灵光闪现,能想到一些与众不同的东西,不过灵感这种东西也是可遇不可求,如果以后明白了,会在以后教程中写出,因为怕到时时间过了太久,文章早已过了可修改期。以前的很多文章也有一些不足之处,但是不能修改了。有时修改比发布还难通过审核,所以就算了,人生总有遗憾,有时不完美才更显真实。

感谢阅读,下期再见。

08相关内容

Python教程:第20篇成员运算符Python教程:第19篇逻辑运算符Python教程:第18篇算术运算符Python教程:第17篇比较运算符Python教程:第11篇变量赋值#python#


转载请注明:http://www.aierlanlan.com/cyrz/5309.html