==值相等 is同一性
Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和value(值)。
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,例如下面两个字符串间的比较:
>>> a = 'iplaypython.com'
>>> b = 'iplaypython.com'
>>> a == b
True
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个列表间的比较,你就会明白is同一性运算符的工作原理:
>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
一个类的不同对象,值不同,要特别注意需要理解一下
class Person(object): def __init__(self, name): self.name = name p1 = Person('王') p2 = Person('王') print('p1 == p2: %s' % (p1 == p2)) # False print('p1 is p2: %s' % (p1 == p2)) # False
print(p1) # <__main__.Person object at 0x02D08350>
print(p2) # <__main__.Person object at 0x02D082F0>
看来了两个实例值应该相等,但是我们可以自定义 __eq__ 判断传递的值相等
# 定义__eq__方法,重新实现==比较方法 class NewPerson(object): def __init__(self, name): self.name = name def __eq__(self, person_obj): """执行==时调用的方法""" return self.name == person_obj.name
np1 = NewPerson("王胖胖") np2 = NewPerson("王胖胖") print("np1 == np2: %s" % (np1 == np2)) # True print("np1 is np2: %s" % (np1 is np2)) # False
LESS IS MORE !