npz
(npz)
1
I am wondering how deterministic is pickle: if I give it two equivalent objects, will they serialize to the same bytes?
There are some notes scattered around the web, but I haven’t got a synthesis of them.
Is there a practical case that fails the basic test like this?
(Edited for specificity after reply)
type(x) == type(y) and x == y and pickle.dumps(x) == pickle.dumps(y)
npz
(npz)
3
What about objects of the same type?
type(x) == type(y) and x == y and pickle.dumps(x) == pickle.dumps(y)
jeanas
(Jean Abou Samra)
4
Nothing guarantees you that. There are several so-called pickle protocols and the one used by default depends on your version of Python. Please read pickle — Python object serialization — Python 3.9.2 documentation.
Here you go:
>>> x = {1: None, 2: None}
>>> y = {2: None, 1: None}
>>> x == y
True
>>> pickle.dumps(x) == pickle.dumps(y)
False
Here is the opposite situation:
>>> x = float('nan')
>>> y = x
>>> x == y
False
>>> pickle.dumps(x) == pickle.dumps(y)
True
1 Like