Python中对象包含的三个基本要素:id(身份标识),type(数据类型),value(值)
==是用来比较两个对象的value(值)是否相等,
is是用来比较两个对象的id(身份标识)是否相等
例1:
x,y,z三个对象的值都是[1, 2, 3],所以在==的情况下都是True
x和y的id值相同,所以 x is y 为True,而x和z的id不同,所以 x is z 为False
例2:
当a,b为整数对象时,Python会把一些频繁使用的整数对象缓存起来,保存到一个叫small_ints的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。Python把这些可能频繁使用的整数对象规定在范围[-5, 256]之间的小对象放在small_ints中,但凡是需要用些小整数时,就从这里面取,不再去临时创建新的对象。(所以在[-5, 256]区间内的整数进行is操作时,返回True,而在此区间外进行is操作时,返回False)
当a,b为字符串对象时,python中有intern机制,它指的就是在创建一个新的字符串对象时,如果已经有了和它的值相同的字符串对象,那么就直接返回那个对象的引用,而不返回新创建的字符串对象。只包括字母数字下划线的字符串,python会对它们使用intern机制。(所以当字符串只包括字母数字下划线时,进行is操作返回True,如果包含其他字符,进行is操作则返回False)
当a,b为元组,list,dict和set类型时,a is b为 False
整数的比较可以参考以下链接:
https://foofish.net/python-int-mystery.html
intern机制的了解可以参考以下链接:
https://zhuanlan.zhihu.com/p/27715851
领取专属 10元无门槛券
私享最新 技术干货