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.
Regards,
John
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
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