On Thursday, May 12, 2016 at 4:24:55 AM UTC-4, srinivas devaki wrote: > On May 9, 2016 5:31 AM, "Tim Chase" <python.l...@tim.thechases.com> wrote: > > > > then that's a bad code-smell (you get quadratic behavior as the > > strings are constantly resized), usually better replaced with > > > > I just want to point out that in Python s += str in loop is not giving > quadratic behavior. I don't know why but it runs fast. I'm very much > interested to know why it is so? > > In [3]: %%timeit > ...: s = '' > ...: for x in xrange(10**6): > ...: s += str(x) > ...: > 1 loop, best of 3: 383 ms per loop > > In [4]: %%timeit > s = '' > for x in xrange(10**6): > s = s + str(x) > ...: > 1 loop, best of 3: 383 ms per loop
The CPython optimization depends on the string having only a single reference. A seemingly unrelated change to the code can change the performance significantly: In [1]: %%timeit ...: s = "" ...: for x in xrange(100000): ...: s = s + str(x) ...: 10 loops, best of 3: 33.5 ms per loop In [2]: %%timeit ...: s = t = "" ...: for x in xrange(100000): ...: s = t = s + str(x) ...: 1 loop, best of 3: 1.57 s per loop Be careful out there... --Ned. -- https://mail.python.org/mailman/listinfo/python-list