【发布时间】:2012-01-25 05:06:28
【问题描述】:
我在我的程序中跟踪到我正在测试对象列表中是否存在对象的行。该行始终返回 False,这意味着该对象不在列表中。事实上,它一直在发生,即使我做了以下事情:
class myObject(object):
__slots__=('mySlot')
def __init__(self,myArgument):
self.mySlot=myArgument
print(myObject(0)==myObject(0)) # prints False
a=0
print(myObject(a)==myObject(a)) # prints False
a=myObject(a)
print(a==a) # prints True
我以前使用过 deepcopy,但我对 Python 的经验不够,无法知道它何时是必要的,什么时候是不必要的,或者从机械上来说有什么区别。我也听说过酸洗,但从未使用过。有人可以向我解释这里发生了什么吗?
哦,还有一件事。线
if x in myIterable:
可能会测试 x 和 myIterable 中每个元素之间的相等性,对吗?因此,如果我可以改变两个对象之间的感知相等性,我可以修改该行的输出吗?是否有内置的和所有其他内联运算符?
【问题讨论】:
-
如果你想重新定义相等,你可以在你的类上定义
__eq__魔术方法。
标签: python object copy equality deep-copy