Surprising timeit result
John O'Hagan
research at johnohagan.com
Tue Oct 27 01:31:53 EDT 2009
On Tue, 27 Oct 2009, Paul Rubin wrote:
> "John O'Hagan" <research at johnohagan.com> writes:
> > 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.
>
> Looks to me like in both versions, d2 is only initialized once, so
> the d1.update in the second case only gets called on the first loop.
> It's not so surprising that comparing d1 and d2 is faster than
> actually updating d1.
>
Of course:
Timer('d1 = {"a":0}; d2 = {"a":1}\nif d1 != d2: d1.update(d2)').timeit()
1.9810600280761719
Timer('d1 = {"a":0}; d2 = {"a":1}\nd1.update(d2)').timeit()
1.7072379589080811
as expected. I wasn't quite clear about how Timer() worked, is my excuse!
Thanks,
John
More information about the Python-list
mailing list