python - Python 如何建立对象之间的相等性?

标签 python object copy equality deep-copy

我在我的程序中追踪到一个错误,我正在测试对象列表中是否存在一个对象。该行始终返回 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 中每个元素之间的相等性,对吗?那么,如果我可以改变两个对象之间的感知平等,我可以修改那条线的输出吗?是否有内置的以及所有其他内联运算符?

最佳答案

  1. 它将第二个操作数传递给 __eq__()第一种方法。

  2. 不正确。它将第一个操作数传递给 __contains__()第二个方法,或者如果不存在这样的方法,则迭代第二个执行相等比较。

也许您打算使用 is,它比较identity 而不是相等性。

关于python - Python 如何建立对象之间的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8998099/

相关文章:

python - 没有名为 psycopg2 的模块

python - 从另一个python脚本调用python脚本并设置执行脚本的执行目录

python - 基于其他列向 pandas 数据框添加列

python - 如何选择某些列具有最大值之一的行

JavaScript 函数作为对象

jQuery : loop through nested objects

javascript - 从 HTML 文件访问 JSON 文件以使用对象

java - Java中的copy方法、equals方法和空数据的问题

c++ - 返回没有拷贝的c++ std::vector?

c# - 在另一个列表中添加列表副本的最佳方法是什么?