[Python-de] strings zusammensetzen.

Stefan Behnel python-de at behnel.de
Sa Sep 16 04:33:29 EDT 2017


Peter J. Holzer schrieb am 16.09.2017 um 09:28:
> (String-Konkatenation ist in Python(3) zumindest bei langen Strings auch
> schön linear)

Es gibt sowohl für bytes-Objekte als auch für Unicode-Strings eine
Sonderbehandlung, die realloc() verwendet. Auf vielen Platformen ist
realloc() effizient und führt im Durchschnitt zu einer linearen Laufzeit
auch bei mehreren Konkatenierungen. Aber nicht auf allen.

Außerdem greift die Optimierung nicht in allen Fällen. Beispielsweise hast
du Pech, wenn über die Konkatenierungen hinweg der Zeichenraum erst von
ASCII auf BMP und dann auf Astral wechselt. Dann muss beim Wechsel der
komplette bisherige String doch wieder im Speicher herum kopiert werden.
Ein join() kann das vermeiden, weil gleich am Anfang alle Strings bekannt
sind, und damit auch der finale Zeichenraum. Hier hast du also die
Garantie, dass das Zusammenfügen effizient erfolgt.

Also kurz: join() ist in jedem Fall die bessere Variante bei vielen
Strings. Konkatenierung ist ok bei einer überschaubaren Menge und da
insbesondere bei kurzen Strings, sollte aber in Schleifen vermieden werden.

Stefan


Mehr Informationen über die Mailingliste python-de