If you're working with objects in an OO language and you want to transfer them to another computer ... or simple save them from the current application for reloading into that application or another one on the same computer later on, you need to
serialize the objects.
Data within OO programming languages is stored in the
heap and as its name implies, the heap isn't neat - there's pointers and information all over the place, and even if you save an object correctly into a file of database, without extra information you probably couldn't read it back in as the memory locations and addresses used internally probably wouldn't be available in the next program.
Serialization is the process that adds the extra information you'll need
Python's cPickle module allows you to serialise an object. The
dumps method writes any object to a string, and the
loads method reads the object back from a string. The reloading program does need to have imported any modules that were used within the dumped object, of course. If you want to write objects straight to a file, you can use the
dump method instead, and reload using the
load method.
Source code examples:
Picking
Unpickling
Class of objects to be stored / recovered
Note also the marshal module, which allows you to dump and restore simple objects, and the pickle module which is written in pure Python rather than a mixture of C and Python. Marshal is OK for simple objects (perhaps its a bit more efficient sometimes) but you should only use pickle rather then cPickle if there's a chance of cPickle not being available.
The term "shelving" is often used in association with pickling. Objects picled can be stored in strings, files, databases ... and the shelve module allows you to use an anydbm 'simple' database for the purpose. Personal choice, though - MySQL, but remember not to store objects for the long term as an upgrade / change to the internals of a class may render pickled object unloadable.
(written 2007-04-15, updated 2008-10-11)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y115 - Additional Python Facilities [183] The elegance of Python - (2005-01-19)
[208] Examples - Gadfly, NI Number, and Tcl to C interface - (2005-02-10)
[239] What and why for the epoch - (2005-03-08)
[463] Splitting the difference - (2005-10-13)
[663] Python to MySQL - (2006-03-31)
[672] Keeping your regular expressions simple - (2006-04-05)
[753] Python 3000 - the next generation - (2006-06-09)
[901] Python - listing out the contents of all variables - (2006-10-21)
[1043] Sending an email from Python - (2007-01-18)
[1136] Buffering output - why it is done and issues raised in Tcl, Perl, Python and PHP - (2007-04-06)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1337] A series of tyre damages - (2007-09-08)
[1876] Python Regular Expressions - (2008-11-08)
[2407] Testing code in Python - doctest, unittest and others - (2009-09-16)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2462] Python - how it saves on compile time - (2009-10-20)
[2655] Python - what is going on around me? - (2010-02-28)
[2721] Regular Expressions in Python - (2010-04-14)
[2745] Connecting Python to sqlite and MySQL databases - (2010-04-28)
[2746] Model - View - Controller demo, Sqlite - Python 3 - Qt4 - (2010-04-29)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2786] Factory methods and SqLite in use in a Python teaching example - (2010-05-29)
[2790] Joining a MySQL table from within a Python program - (2010-06-02)
[3089] Python regular expressions - repeating, splitting, lookahead and lookbehind - (2010-12-17)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[4085] JSON from Python - first principles, easy example - (2013-05-13)
[4211] Handling JSON in Python (and a csv, marshall and pickle comparison) - (2013-11-16)
[4298] Python - an interesting application - (2014-09-18)
[4439] Json is the new marshall, pickle and cPickle / Python - (2015-02-22)
[4451] Running an operating system command from your Python program - the new way with the subprocess module - (2015-03-06)
[4536] Json load from URL, recursive display, Python 3.4 - (2015-10-14)
[4593] Command line parameter handling in Python via the argparse module - (2015-12-08)
[4709] Some gems from Intermediate Python - (2016-10-30)
J809 - Java - Serialization [1067] Serialization in Java - all layers required! - (2007-02-05)
Some other Articles
Object Oriented Model - a summary of changes from PHP4 to PHP5Course, right place, right timeGordon Dodge, R.I.P.Helsinki - what comes naturallyTurning objects into something you can store - Pickling (Python)Python decorators - wrapping a method call in extra codeA picture (mostly in words) of Helsinki__new__ v __init__ - python constructor alternatives?Using a list of keys and a list of values to make a dictionary in Python - zipPython dictionary for quick look ups