Ric*_*ard 5 python pickle object-comparison
我认为这是预期的行为,但想检查一下,也许找出原因,因为我所做的研究结果是空白
我有一个函数可以提取数据,创建自定义类的新实例,然后将其附加到列表中。该类仅包含变量。
然后,我使用协议 2 作为二进制文件将该列表腌制到文件中,稍后我重新运行脚本,从源中重新提取数据,我有一个包含自定义类实例的新列表,为了测试,我将数据保留为源数据相同。
重新加载pickle文件
现在当我做一个:
print source_list == pickle_list
Run Code Online (Sandbox Code Playgroud)
这总是会回来False,我不知道为什么,如果我打印列表或查看结构,它们看起来完全相同。
任何想法都会很棒,这是我需要整理的最后一点。
比较同一类的两个对象默认会产生 False(除非它们是相同的单个对象),即使它们具有相同的内容;换句话说,默认情况下,来自同一类的两个直观上“相同”的对象被认为是不同的。这是一个例子:
>>> class C(object):
... def __init__(self, value):
... self.value = value
...
>>>
>>> C(12) == C(12)
False
Run Code Online (Sandbox Code Playgroud)
您想要在自定义类中定义__eq__()( 和__ne__()),以便它对于包含相同数据的对象产生 True(分别为 False)。更多信息可以在官方文档中找到。对于上面的例子,这将是:
>>> 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2264 次 |
| 最近记录: |