I am new in python and want implement fast object serialization. I was trying to use json, but it was too slow, also was trying to use marshall module, but the size of the objects serialized by marshall 6-7 times more than pickle, so i decided to use pickle in my project. I read about cPickle module, read that it quite fast, but there is no such module in python 3 and docs says that module named _pickle is written in C. So in my projects i use
import _pickle as pickle
Is any difference between pickle and _pickle? How i can implement faster objects serialization/deserialization?
“Pickling” is the process whereby a Python object hierarchy is converted into a byte stream, and “unpickling” is the inverse operation, whereby a byte stream (from a binary file or bytes-like object) is converted back into an object hierarchy.
The pickle data format is standardized, so strings serialized with pickle can be deserialized with cPickle and vice versa. The main difference between cPickle and pickle is performance. The cPickle module is many times faster to execute because it's written in C and because its methods are functions instead of classes.
Pickle in Python is primarily used in serializing and deserializing a Python object structure. In other words, it's the process of converting a Python object into a byte stream to store it in a file/database, maintain program state across sessions, or transport data over the network.
Pickle is used for serializing and de-serializing Python object structures, also called marshalling or flattening. Serialization refers to the process of converting an object in memory to a byte stream that can be stored on disk or sent over a network.
The pickle
module already imports _pickle
if available. It is the C-optimized version of the pickle
module, and is used transparently.
From the pickle.py
source code:
# Use the faster _pickle if possible
try:
from _pickle import *
except ImportError:
Pickler, Unpickler = _Pickler, _Unpickler
and from the pickle
module documentation:
The
pickle
module has an transparent optimizer (_pickle
) written in C. It is used whenever available. Otherwise the pure Python implementation is used.
In Python 2, _pickle
was known as cPickle
, but has been updated to allow the transparent use as an implementation detail.
From the Library Changes section of the What's New In Python 3.0 documentation:
A common pattern in Python 2.x is to have one version of a module implemented in pure Python, with an optional accelerated version implemented as a C extension; for example,
pickle
andcPickle
. This places the burden of importing the accelerated version and falling back on the pure Python version on each user of these modules. In Python 3.0, the accelerated versions are considered implementation details of the pure Python versions. Users should always import the standard version, which attempts to import the accelerated version and falls back to the pure Python version. Thepickle
/cPickle
pair received this treatment. The profile module is on the list for 3.1. TheStringIO
module has been turned into a class in the io module.
Since it is a python convention that implementation details are prepended with an underscore, cPickle
became _pickle
. Notably this means that if you are importing _pickle
, the API has no guaranteed contract and could break backwards-compatibility in future releases of python3, as unlikely as that may be.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With