pickle 文件可以重现吗?

Mic*_*ner 5 python hash pickle

我想对一些pickle文件进行哈希处理以进行验证,但我想知道 Python 是否pickle总是为相同的输入生成相同的输出,至少在协议版本内?我想知道操作系统是否有影响?你有参考资料吗?

Era*_*raw 2

到目前为止,泡菜过程似乎并不 总是 确定性的

另外,根据 pickle 内部的工作原理,这并不是一个谜,但您可能会发现这种行为令人不安:

>>> class B:
...     pass
>>>
>>> b = B()
>>> b.x = 1
>>> b.y = 2
>>>
>>> c = B()
>>> c.y = 2
>>> c.x = 1
>>> hash(pickle.dumps(b))
5326405855805501882
>>> hash(pickle.dumps(c)) 
-2711706543463941149
Run Code Online (Sandbox Code Playgroud)

根据记录,似乎有人尝试使用pickle来达到科学可重复性的目的,但该项目现在似乎已被放弃。