Python中is和==的区别

Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么。

在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)

==比较操作符和is同一性运算符区别,is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。类似于Java中的equal()和==。

二、实验:

>>> x = y = [4,5,6]

>>> z = [4,5,6]

>>> x == y

True

>>> x == z

True

>>> x is y

True

>>> x is z

False

>>>

>>> print id(x)

3075326572

>>> print id(y)

3075326572

>>> print id(z)

3075328140

>>> a = 1 #a和b为数值类型

>>> b = 1

>>> a is b

True

>>> id(a)

14318944

>>> id(b)

14318944

三、结论:

  1. 只要各对象的值一样,则 x == y 的值一定为True;
  2. 只有数值型和字符串型,并且在通用对象池中的情况下,a is b才为True,否则当a和b是int,str,tuple,list,dict或set型时,a is b均为False。

四、原因:

  1. ==只比较值是否相等,is比较id是否相同。
  2. 事实上Python 为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。而Python 对小整数的定义是 [-5, 257),只有数字在-5到256之间它们的id才会相等,超过了这个范围就不行了,同样的道理,字符串对象也有一个类似的缓冲池,超过区间范围内自然不会相等了。