我认为这是预期的行为,但我想检查并找出原因,因为我所做的研究已经空白了
我有一个拉取数据的函数,创建我的自定义类的新实例,然后将其附加到列表中。该类只包含变量。
然后我使用协议2作为二进制文件将该列表挑选到文件中,稍后我重新运行脚本,从我的源代码重新提取数据,我有一个包含我的自定义类实例的新列表,用于测试我保留数据源数据相同。
重新加载pickle文件
现在我做的时候:
print source_list == pickle_list
这总是回来False
,我不知道为什么,如果我打印列表或看结构看起来完全一样。
任何想法都会很明显,这是我需要排序的最后一点。
答案 0 :(得分:3)
您的类可能没有定义有意义的__eq__
,因此正在比较对象标识。由于从pickles加载的类与生成列表中的类不同(即使它们具有相同的数据),因此得到False
。
答案 1 :(得分:1)
比较同一个类的两个对象默认情况下会产生False(除非它们是相同的单个对象),即使它们具有相同的内容;换句话说,默认情况下,来自同一类的两个直观“相同”对象被认为是不同的。这是一个例子:
>>> class C(object):
... def __init__(self, value):
... self.value = value
...
>>>
>>> C(12) == C(12)
False
您希望在自定义类中定义__eq__()
(和__ne__()
),以便为包含相同数据的对象生成True。更多信息可以在official documentation中找到。对于上面的例子,这将是:
>>> class C(object):
... # ...
... def __eq__(self, other):
... return self.value == other.value
... def __ne__(self, other):
... return not self == other # More general than self.value != other.value
...
>>> C(12) == C(12) # __eq__() is called
True
>>> C(12) != C(12) # __ne__() is called
False