Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Stefan Behnel Newsgroups: de.comp.lang.python Subject: Re: [Python-de] strings zusammensetzen. Date: Sat, 16 Sep 2017 10:33:29 +0200 Lines: 22 Message-ID: References: <9gjg7e-jn3.ln1@gate.homenet> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: news.uni-berlin.de rZ3dndT85ELUUemGB/HoHAkijcHlP06i3fb222Oyt2YQ== Return-Path: X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1505550810; s=domk; d=behnel.de; h=Content-Transfer-Encoding:Content-Language:Content-Type:In-Reply-To: MIME-Version:Date:From:References:To:Subject; bh=c3G/zZbN3/kpwO4hciUf1Oxgn/NgMz2bv7YyXk9REb8=; b=QUek5ycgaMgTjej2Ju7j3cRjmfRQJcYXjD745VRFBGK/YvSxGH64kdx93fZy6Is+x9 /RGq6VzW1P315UCb1QC/SUSvLaiotr4ezgLH07jKfn56KTgL0goXcFX6SE8mwoTYRpdS rSBPCg5uXjRWX32dM4tMVZZfzwExVP+HALopM= X-RZG-AUTH: :E1MMdFW4b++AXZOTwA41DOYM0Dv9LNWvavC/fJZqSuoXq8/b35jbpozFABqPas32JtYvDvUlc6d7YRKV4yBPniCAkPYegMWt5Hd5KIk= X-RZG-CLASS-ID: mo00 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 In-Reply-To: Content-Language: de-DE X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.24 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: X-Mailman-Original-References: <9gjg7e-jn3.ln1@gate.homenet> Xref: csiph.com de.comp.lang.python:4909 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