代码改变世界

Python中is和==的区别

2013-07-28 11:52  江湖么名  阅读(400)  评论(0编辑  收藏  举报

通常我们写:

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