Python编程笔记(二):=和is

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

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180105G0A8JM00?refer=cp_1026

扫码关注云+社区