软件测试 / 人工智能丨身份运算符
Python 中的身份运算符用来判断两个对象的引用是否为同一个,换言之,就是用来比较两个对象的内存地址是否相同。
Python 对数字和字符串做了一些优化以提高性能和减少内存开销。以下是 Python 对数字和字符串做的一些优化:
整数池(Integer Pool):Python 会在程序运行时预先创建一些整数对象,并将其保存在整数池中。这样,在创建整数对象时,可以重用已存在的对象,而不是创建新的对象。这在一定程度上减少了内存开销。
字符串池(String Pool):对于较短的字符串,Python 会使用字符串池进行优化。字符串池是一个缓存区,保存着所有共享相同内容的字符串对象。当创建新的字符串对象时,Python 会首先检查是否已经存在相同内容的字符串对象,如果存在,则直接重用已有的对象,避免重复创建新的对象。
因此,在某些情况下,字面量相同的两个对象,实际并不是同一个对象,此时如果需要区分对象的话,就需要使用身份运算符。
身份运算符如下表所示:
身份运算符 is
is 用来判断两个对象内存引用地址是否相同,如果相同,结果为真 True,如果不相同,结果为假 False。
注意:两个字面量相同的对象,内存地址未必相同,就像两个双胞胎,长的相同,但是是两个独立的个体。
身份运算符 is not
is not 用来判断两个对象内存引用地址是否不同,如果不同,结果为真 True,如果相同,结果为假 False。
is 和 == 的区别
在 Python 中,万物皆对象,而对象的三个基本要素:
内存地址
数据类型
值
而 is 与==都作为常用的判断语句去进行使用,这两者之间的主要区别是:
==运算符: 只比较两个对象的值,相同返回 True,不同返回 False。
is 运算符: 比较两个对象的 id,相同返回 True,不同返回 False。
在这种场景下, 两个判断的执行结果均为 True。
在这种场景下, 两个判断的执行结果不一致。
版权声明: 本文为 InfoQ 作者【测试人】的原创文章。
原文链接:【http://xie.infoq.cn/article/980ab0de295005b3aa0458ed2】。文章转载请联系作者。
评论