首先来看看例子:
(1)>>> a = 'hello world'>>> b = 'hello world'>>> print(id(a),id(b))2037326180976 2037326180784>>> print(a is b)False>>> print(a == b)True(2)>>> a = 'hello world'>>> b = a>>> print(id(a),id(b))2037326181168 2037326181168>>> print(a == b)True>>> print(a is b)True
上述例子(1)中的a、b分别指向的是不同的内存空间,此时a is b返回False,a == b返回True。但例(2)中当a和b指向相同内存空间时a is b返回的是True,a == b返回仍是True。没错,根据官方文档中的说法,is表示的是对象标识符(object identity),而==用来检查值相等(equality)。换句话说,is就是用来判断两个对象是否在本质上是一个对象,即占用的是否是相同的内存空间。所以当我们在判断a is b时其实是判断id(a) == id(b),而检查a == b时其实是调用了__eq__()方法,相当于a.__ eq __(b)。