#内容:python操作符==,is区别与详解#
#环境:3.6.2#
1 : ==,is的区别
简单来说,' == ' :判断两个对象的值(value)是否相等; ‘ is ’ 判断两个对象的引用(id)是否相同. 示例:
显而易见,a与b的引用不同,a与c的引用相同,如果这不够直观,我们可以id()下,如下:
2 :实现原理
( 1 ) : == 是值比较,不可变对象(str,int,float..)会直接进行值比较,可变对象(list,dict..)会调用它们的__eq__函数来比较,自定义对象,若实现了__eq__函数,就会使用它比较,反之,==比较.
( 2 ) : is是引用比较,判断两个对象的指针指值是否相同.
3 - 对象缓存机制.
python会对较小的object缓存(例如数值对象),下次用到较小的对象时,会去缓存区查找,若找到,不会开辟新内存,将;若找不到,开辟新内存.例如下面这个例子.
而对于字符串对象,is判断,无论何时,返回True.
4 - 这就结束了?
不知道有没有人对3中的较小对象提出疑问,怎样才算是小? 10?-1?-100? 其实,python3中对数值做了范围:
-5 <= num <= 256.
超过该范围的任何数据(哪怕时万分之一),is操作都会返回False,如下:
而在这个范围内的所有数值型对象is操作都会返回True.
小结:== 和 is抓住其主要区别就可以正确操作,希望能给每一个奋斗的你带来些许帮助.