On 22/06/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> I created a shelf called 'myshelf' and put two objects in it, a string and a 
> list. When I open the shelf I get:
>
> >>> d=shelve.open('/Users/development/Desktop/myshelf')
> >>> d.keys()
> ['dir1', 'dir2']
> >>> d
> {'dir2': '/Users/development/Desktop/RSSReaderApp/RSS.db', 'dir1': 
> ['.DS_Store', '.localized', 'access the latest version', 'Python Quick 
> Reference.webloc', 'rssdb', 'workspace']}
>
> It seems that when you use shelve.open(), it actually brings the entire shelf 
> dictionary into memory, accessible through d.

Well ... all that tells me is that when you ask python for a string
representation of a shelf, it reads the entire thing.

> What if you had 100 objects in myshelf, or 1000 or 100,000? Wouldn't it get 
> bogged down?

If you try to print out the whole thing, probably.  Let's try some test:

>>> import shelve
>>> d = shelve.open('test.shelf')
>>> for i in range(1000):
...  d[str(i)] = 'x'*i
...
>>> d.close()

Morpork:~/tmp repton$ ls -l test.shelf
-rw-r--r--   1 repton  repton       1M Jun 22 14:23 test.shelf

First, we'll measure how long it takes python to open the shelf using
shelve.open:

Morpork:~/tmp repton$ python -m timeit -s 'import shelve' 'd =
shelve.open("test.shelf")'
1000 loops, best of 3: 1.95 msec per loop

Now we'll measure how long it takes python to open a shelf and turn it
into a string:

Morpork:~/tmp repton$ python -m timeit -s 'import shelve' 'd =
shelve.open("test.shelf")' 'str(d)'
10 loops, best of 3: 51.5 msec per loop

So, that's about a factor of 25 difference.

HTH!

-- 
John.
_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to