Steven D'Aprano wrote:

>>>>> store = {}
>>>>> def atom(str):
>>      global store
>>      if str not in store:
>>              store[str] = str
>>      return store[str]
> 
> Oh lordy, that's really made my day! That's the funniest piece of code 
> I've seen for a long time! Worthy of being submitted to the DailyWTF.

Here's a script to show atom()'s effect on memory footprint:

$ cat atom.py
import sys
data = [1]*1000
items = []
cache = {}
if "-a" in sys.argv:
    def atom(obj):
        try:
            return cache[obj]
        except KeyError:
            cache[obj] = obj
            return obj
else:
    def atom(obj):
        return obj
try:
    while 1:
        items.append(atom(tuple(data)))
except MemoryError:
    print len(items)
$ ulimit -v 5000
$ python atom.py
226
$ python atom.py -a
185742

So if you are going to submit Sam's function make sure to bundle it with
this little demo...

Peter
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to