在我的脚本中,我使用大型复杂对象(一个包含字符串、字典和自定义类型的类对象的多维列表)。我需要复制、pickle(缓存)和取消pickle,以及通过MPI
接口在子进程之间发送。在某些情况下,我怀疑数据传输是没有错误的,也就是说,如果最后我有相同的对象。在
因此,我想计算它的散列和或其他类型的指纹。我知道,例如,hashlib
库;但是,它在对象类型方面受到限制:
>>> import hashlib
>>> a = "123"
>>> hashlib.sha224(a.encode()).hexdigest()
'78d8045d684abd2eece923758f3cd781489df3a48e1278982466017f'
>>> a = [1, 2, 3]
>>> hashlib.sha224(a).hexdigest()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object supporting the buffer API required
因此,问题是:有没有类似的函数可以处理任何类型的对象?在
一种选择是递归地将结构的所有元素转换成散列对应的元素,即将列表转换为元组,将dict和对象转换为frozensets,然后简单地将
hash()
应用于整个元素。举例说明:返回一个字符串,它是一个哈希对象。你可以这样做
^{pr2}$相关问题 更多 >
编程相关推荐