1

我在比较 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

有没有更好的办法?有没有可能不起作用的情况?

4

2 回答 2

1

检查相等性的简单可靠方法是==

a == b

检查它们是否具有相同身份的简单可靠方法是is

a is b

第二种方式 ( is) 执行您打算执行的相同检查str(a)==str(b)

于 2013-11-06T16:24:52.710 回答
1

使用您的代码,您不会以更快的方式比较两个对象,而只是询问您的变量是否指向同一个对象,这是完全不同的。

无论如何,pythonic的方法不是将指针转换为字符串,而是使用运算符“is”:

>>> a is b
True
>>> b is A
True
于 2013-11-06T16:29:50.710 回答