Python语言中的对象包含三要素:id、type、value,其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。在Python语言中会用到对象之间比较,可以用==,也可以用is。但是它们的区别是什么呢?
is:判断的是a对象是否就是b对象,是通过id来判断的;is比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。
==:判断的是a对象的值是否和b对象的值相等,是通过value来判断的;==比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。
In [1]: a = [1, 2, 3, 4, 5] In [2]: b = a In [3]: c = a.copy() In [4]: a == b Out[4]: True In [5]: a is b Out[5]: True In [6]: a == c Out[6]: True In [7]: a is c Out[7]: False
在变量和单例值之间比较时,应该使用is。目前,最常使用is的地方是判断对象是不是None。下面是推荐的写法:
a is None
判断不是None的推荐写法是:
a is not None