我遇到了比较Python中复杂对象的问题,如果有人这样做,有效object_a = object_b
后跟if object_a == object_b:
。我通常的解决方案是将对象的地址变成一个字符串,该字符串应该始终是唯一的。
下面是两种方式,比较对象并比较str(object_a)
和str(object_b)
的值。
>>> class Thing:
>>> def __init__(self):
>>> self.x = 0
>>> return
>>>
>>> a = Thing()
>>> b = a
>>> b == a
True
>>> a_pointer = str(a)
>>> b_pointer = str(b)
>>> a
<__main__.Thing instance at 0x16c0098>
>>> b
<__main__.Thing instance at 0x16c0098>
>>> a == b
True
有更好的方法吗?有没有这种情况可能不起作用?
答案 0 :(得分:1)
检查相等性的简单确定方法是==
:
a == b
检查它们是否具有相同身份的简单明确方式是is
:
a is b
第二种方式(is
)执行您希望str(a)==str(b)
执行的相同检查。
答案 1 :(得分:1)
使用您的代码,您不是以更快的方式比较两个对象,而只是询问您的变量是否指向同一个对象,这是完全不同的。
无论如何,这样做的pythonic方法不是将指针转换为字符串,而是使用运算符“is”:
>>> a is b
True
>>> b is A
True