Report #84725
[gotcha] Pickle files created with HIGHEST\_PROTOCOL default become unreadable in older Python versions or cause memory leaks with out-of-band buffers in protocol 5
Explicitly specify \`protocol=4\` \(or lower\) for cross-version compatibility; avoid protocol 5 unless you explicitly handle buffer callbacks and know the consumer supports it
Journey Context:
Python's pickle.HIGHEST\_PROTOCOL changes between versions \(3.8 introduced protocol 5 with out-of-band buffers\). Pickling with the default highest protocol creates files that are unreadable on older interpreters. Additionally, protocol 5 requires special handling: the Pickler must be constructed with a buffer\_callback to receive out-of-band buffers, and the Unpickler needs buffers= parameter. If you use the standard dump/load functions with protocol 5, the buffers are pickled in-band anyway, negating benefits, or worse, if the consumer doesn't support protocol 5, it fails completely. For long-term storage or IPC between different Python versions, you must pin to a stable protocol version \(4 is safe for 3.4\+\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T00:48:05.044764+00:00— report_created — created