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
J809 - Java - Serialization [2435] Serialization - storing and reloading objects - (2009-10-04)
[1067] Serialization in Java - all layers required! - (2007-02-05)
Y115 - Additional Python Facilities [4709] Some gems from Intermediate Python - (2016-10-30)
[4593] Command line parameter handling in Python via the argparse module - (2015-12-08)
[4536] Json load from URL, recursive display, Python 3.4 - (2015-10-14)
[4451] Running an operating system command from your Python program - the new way with the subprocess module - (2015-03-06)
[4439] Json is the new marshall, pickle and cPickle / Python - (2015-02-22)
[4298] Python - an interesting application - (2014-09-18)
[4211] Handling JSON in Python (and a csv, marshall and pickle comparison) - (2013-11-16)
[4085] JSON from Python - first principles, easy example - (2013-05-13)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3089] Python regular expressions - repeating, splitting, lookahead and lookbehind - (2010-12-17)
[2790] Joining a MySQL table from within a Python program - (2010-06-02)
[2786] Factory methods and SqLite in use in a Python teaching example - (2010-05-29)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2746] Model - View - Controller demo, Sqlite - Python 3 - Qt4 - (2010-04-29)
[2745] Connecting Python to sqlite and MySQL databases - (2010-04-28)
[2721] Regular Expressions in Python - (2010-04-14)
[2655] Python - what is going on around me? - (2010-02-28)
[2462] Python - how it saves on compile time - (2009-10-20)
[2407] Testing code in Python - doctest, unittest and others - (2009-09-16)
[1876] Python Regular Expressions - (2008-11-08)
[1337] A series of tyre damages - (2007-09-08)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1136] Buffering output - why it is done and issues raised in Tcl, Perl, Python and PHP - (2007-04-06)
[1043] Sending an email from Python - (2007-01-18)
[901] Python - listing out the contents of all variables - (2006-10-21)
[753] Python 3000 - the next generation - (2006-06-09)
[672] Keeping your regular expressions simple - (2006-04-05)
[663] Python to MySQL - (2006-03-31)
[463] Splitting the difference - (2005-10-13)
[239] What and why for the epoch - (2005-03-08)
[208] Examples - Gadfly, NI Number, and Tcl to C interface - (2005-02-10)
[183] The elegance of Python - (2005-01-19)
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