Populating a dictionary, fast [SOLVED SOLVED]

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Wed Nov 14 18:26:17 EST 2007


On Wed, 14 Nov 2007 18:16:25 +0100, Hrvoje Niksic wrote:

> Aaron Watters <aaron.watters at gmail.com> writes:
> 
>> On Nov 12, 12:46 pm, "Michael Bacarella" <m... at gpshopper.com> wrote:
>>>
>>> > It takes about 20 seconds for me. It's possible it's related to
>>> > int/long
>>> > unification - try using Python 2.5. If you can't switch to 2.5, try
>>> > using string keys instead of longs.
>>>
>>> Yes, this was it.  It ran *very* fast on Python v2.5.
>>
>> Um.  Is this the take away from this thread?  Longs as dictionary keys
>> are bad?  Only for older versions of Python?
> 
> It sounds like Python 2.4 (and previous versions) had a bug when
> populating large dicts on 64-bit architectures.

No, I found very similar behaviour with Python 2.5.


>> Someone please summarize.
> 
> Yes, that would be good.


On systems with multiple CPUs or 64-bit systems, or both, creating and/or 
deleting a multi-megabyte dictionary in recent versions of Python (2.3, 
2.4, 2.5 at least) takes a LONG time, of the order of 30+ minutes, 
compared to seconds if the system only has a single CPU. Turning garbage 
collection off doesn't help.


-- 
Steven.



More information about the Python-list mailing list