要明确==和is的区别,首先要知道python对象所包含的三个基本元素,分别是id(身份标识),type(数据类型),value(值)。
is 和 == 都是对对象进行比较判断作用的,但是判断的内容不一样。
is是对对象进行同一性判断,即对对象的id(身份标识)是否一致进行判断
而 == 是对对象的value(值)进行判断的。
下面举例说明:
由上图可知,x,y共用同一段内存,所以x,y的id和value都相同,所以x is y和x == y都为True,而x和z的value相同,但是id不同,所以x==z为True,而x is z为False。
大家从上面的例子中可以看出,当数大于256或者小于-5后,其id不同了,这是因为python为了优化速度,使用小整数对象池,避免为整数频繁申请和销毁内存空间。而python对小整数的定义为[-5,256].只有数在-5~256之间,他们的id才相同,超过这个范围就不行了,同样在字符串也有一个类似的缓冲池。
总的来说,只有当对象为int和str,且在通用对象池中,两者进行判断才会为True,其他的都为False