GC is very expensive: am I doing something wrong?

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Tue Mar 23 02:32:13 EDT 2010


On Mon, 22 Mar 2010 22:05:40 -0700, Paul Rubin wrote:

> Antoine Pitrou <solipsis at pitrou.net> writes:
>> "Orders of magnitude worse", in any case, sounds very exaggerated.
> 
> The worst case can lose orders of magnitude if a lot of values hash to
> the same bucket.


Well, perhaps one order of magnitude.


>>> for i in xrange(100):
...     n = 32*i+1
...     assert hash(2**n) == hash(2)
...
>>> d1 = dict.fromkeys(xrange(100))
>>> d2 = dict.fromkeys([2**(32*i+1) for i in xrange(100)])
>>>
>>> from timeit import Timer
>>> setup = "from __main__ import d1, d2"
>>> t1 = Timer("for k in d1.keys(): x = d1[k]", setup)
>>> t2 = Timer("for k in d2.keys(): x = d2[k]", setup)
>>>
>>> min(t1.repeat(number=1000, repeat=5))
0.026707887649536133
>>> min(t2.repeat(number=1000, repeat=5))
0.33103203773498535




-- 
Steven



More information about the Python-list mailing list