shelve implementation
David Fisher
python at rose164.wuh.wustl.edu
Tue Feb 1 05:46:47 EST 2000
More information about the Python-list mailing list
Tue Feb 1 05:46:47 EST 2000
- Previous message (by thread): shelve implementation
- Next message (by thread): shelve implementation
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
>>>>>>>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<< On 1/31/00, 10:34:36 AM, Robin Becker <robin at jessikat.demon.co.uk> wrote regarding shelve implementation: > can someone explain why shelve uses StringIO as an intermediate rather > than doing the pickles direct > ie shelve uses > def __getitem__(self, key): > f = StringIO(self.dict[key]) > return Unpickler(f).load() > def __setitem__(self, key, value): > f = StringIO() > p = Pickler(f) > p.dump(value) > self.dict[key] = f.getvalue() > whereas I would have done > def __getitem__(self, key): > return loads(self.dict[key]) > def __setitem__(self, key, value): > self.dict[key] = dumps(value) Well, I wasn't there but... After glancing through shelve.py, pickle.py, cPickle.c, and marshal.c, and consulting with my numerologist, I have constructed the following plausible (i.e. Wrong) explaination. The code in shelve would be faster than your code if the module cStringIO was available and the module cPickle wasn't. Loads() and dumps() don't get rid of the StringIO() call, just move it into the pickle module, and pickle imports StringIO() from module StringIO, not cStringIO. After consulting a chicken's innards, I suspect (i.e. Don't know) that cStringIO wasn't available at the time, and was actually inspired by the existance of pickle (now i'm really reaching). Anyway, to make a long story short, i'm sure it made sense at the time. If you wait a while, i'm sure that someone who was actually there, constructing mnemonic circuits with stone knives and bear skins, will tell you what they were thinking <wink>. On another archeologial note, both cStringIO and cPickle are copyright Digital Creations and are the only modules that i have found: #define UNLESS(E) if(!(E)) which lets them write code like: UNLESS(PyArg_ParseTuple(...)) return NULL; which i think is unbearably cute.
- Previous message (by thread): shelve implementation
- Next message (by thread): shelve implementation
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list