Python中is和==的区别

通常我们写:

1 if foo is None: pass

这个写法与以下的写法有何区别呢?

1 if foo == None: pass

is当比较的是相同的对象实例时总是返回True。而==则完全决定于__eq__()方法的实现。

例如:

1 >>> class foo(object):
2        def __eq__(self, other):
3            return True
4  
5 >>> f = foo()
6 >>> f == None
7 True
8 >>> f is None
9 False
Python中的对象包含三要素:id、type、value
其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
is判断的是a对象是否就是b对象,是通过id来判断的
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的
 1 >>> a = 1
 2 >>> b = 1.0
 3 >>> a is b
 4 False
 5 >>> a == b
 6 True
 7 >>> id(a)
 8 12777000
 9 >>> id(b)
10 14986000
11 >>> a = 1
12 >>> b = 1
13 >>> a is b
14 True
15 >>> a == b
16 True
17 >>> id(a)
18 12777000
19 >>> id(b)
20 12777000

 

原文地址:https://www.cnblogs.com/mmix2009/p/3220954.html