[Tutor] append string
Dave Kuhlman
dkuhlman at rexx.com
Sun Mar 23 01:46:23 CET 2008
On Sat, Mar 22, 2008 at 09:46:58AM +0100, Andreas Kostyrka wrote:
>
> Basically, strings are immutable. If you need to append something to a
> string, you need to construct a new string object with the new value.
>
> Now if you are using this to collect huge outputfiles in pieces, one of
> the common idioms in Python is collecting it in a list, and converting
> to string at the end:
>
> collector = []
> for i in xrange(100000):
> collector.append((str(i) * 80)[0:80])
>
> string = "".join(collector)
> assert len(string) == 8000000 # ~8MB
That was formerly good advice for sure, and it probably still is
good advice. But, read the following note from
http://docs.python.org/lib/typesseq.html:
(6)
If s and t are both strings, some Python implementations such as
CPython can usually perform an in-place optimization for
assignments of the form s=s+t or s+=t. When applicable, this
optimization makes quadratic run-time much less likely. This
optimization is both version and implementation dependent. For
performance sensitive code, it is preferable to use the str.join()
method which assures consistent linear concatenation performance
across versions and implementations. Changed in version 2.4:
Formerly, string concatenation never occurred in-place.
As the above note says, this optimization is implementation
dependent. In particular, if you plan on moving your code to
Jython, then follow Andreas's suggestion to use list append
followed by string join.
- Dave
--
Dave Kuhlman
http://www.rexx.com/~dkuhlman
More information about the Tutor
mailing list