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