Surprising timeit result

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Tue Oct 27 02:18:36 EDT 2009


On Tue, 27 Oct 2009 04:36:12 +0000, John O'Hagan wrote:

> I sometimes use timeit to see if it's better to check if something needs
> doing, or to just do it anyway. This result was surprising:
> 
> setup =  'd1 = {"a":0, "b":0}; d2 = {"a":0, "b":1}'
> 
> Timer('d1.update(d2)', setup).timeit() 2.6499271392822266
> 
> Timer('if d1 != d2: d1.update(d2)', setup).timeit() 1.0235211849212646
> 
> In other words, in this case it's substantially quicker to check for
> something and then proceed, than it is to just proceed! I'm curious
> about the explanation.

The code snippet is executed inside a loop. The first snippet runs 
d1.update(d2) one million times. The second snippet runs "if d1 != d2" 
one million times, and d1.update(d2) once.


-- 
Steven



More information about the Python-list mailing list