Python中is和==的区别
2013-07-28 11:52 江湖么名 阅读(402) 评论(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