When to clear a dictionary...

Larry Bates larry.bates at websafe.com
Fri Apr 20 18:05:18 EDT 2007


Gabriel Genellina wrote:
> En Fri, 20 Apr 2007 14:28:00 -0300, Larry Bates
> <larry.bates at websafe.com> escribió:
> 
>> Bill Jackson wrote:
>>> What is the benefit of clearing a dictionary, when you can just reassign
>>> it as empty?
>>
>> If you have objects that point to the dictionary (something like a cache)
>> then you want to clear the existing dictionary instead of just assigning
>> it to empty.  If nothing points to it, assigning it to empty is fast and
>> you can let garbage collection do the rest.
> 
> For an actual comparision, see Alex Martelli posts a few days ago:
> http://mail.python.org/pipermail/python-list/2007-March/433027.html
> 
>>>>>> a = {1:2,3:4}
>>>>>> b = {1:2:4:3}
>>>>>> a.clear()
>>>>>> a.update(b)
>>>
>>>>>> a = {1:2,3:4}
>>>>>> b = {1:2,4:3}
>>>>>> for key in b:
>>> ...     a[key] = b[key]
>>>
> 
>> Syntax error in the first example but if you fix that the first two are
>> equivalent (but I would suspect that the second would be faster for large
>> dictionaries).
> 
> It's the other way; the first method contains a single Python function
> call and most of the work is done in C code; the second does the
> iteration in Python code and is about 4x slower.
> 
>> python -m timeit -s "b=dict.fromkeys(range(10000));a={}" "a.update(b)"
> 100 loops, best of 3: 10.2 msec per loop
> 
>> python -m timeit -s "b=dict.fromkeys(range(10000));a={}" "for key in
>> b: a[key]=b[key]"
> 10 loops, best of 3: 39.6 msec per loop
> 
> --Gabriel Genellina

That is what I meant to say, thanks for catching the error.

-Larry



More information about the Python-list mailing list