当然,比较Python中两个复杂对象的简单方法?

时间:2013-11-06 16:10:36

标签: python pointers comparison-operators

我遇到了比较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

有更好的方法吗?有没有这种情况可能不起作用?

2 个答案:

答案 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