Seite 1 von 1

byte-Array im Speicher zum immer wieder überschreiben...

Verfasst: Montag 12. Juli 2010, 15:29
von akis.kapo
Hi all,

ich nutze aktuell in einer Schleife strings, die ich immer wieder überschreibe:

Code: Alles auswählen

for i in bla:
    s = i + s[3] # whatever...
Soll ja nicht so gemacht werden eigentlich. Doch wie wäre der aktuelle Weg in
python 2.6.x für begabte Python Programmierer?

Früher hab ich (c)StringIO() genutzt und statt den String zu überschreiben
einfach .reset(), .truncate() benutzt. Es war schneller als den String jedes
mal zu überschreiben. Ausserdem brauch ich ohnehin kein Unicode String, sondern
nur bytes von 0-255 (File-I/O).

Was ist die aktuelle Methode in 2.6.x und in 3.x (io.*)?

Am einfachsten ist es vergleichbar mit nem C-char-array.
Hauptsache schnell und wenig GC-overhead.

Brauch nur ein Stichwort und ein Beispiel.
(Ok, vielleicht noch nen Link auf die doc.python.* libref...)

Danke wie immer im Voraus.

Re: byte-Array im Speicher zum immer wieder überschreiben...

Verfasst: Montag 12. Juli 2010, 15:38
von DasIch
Man würde auf ein bytearray() zurückgreifen ;) Ist das gleiche wie bytes(). allerdings mutable.

Re: byte-Array im Speicher zum immer wieder überschreiben...

Verfasst: Montag 12. Juli 2010, 17:34
von Darii
akis.kapo hat geschrieben:Am einfachsten ist es vergleichbar mit nem C-char-array.
Nimm doch ein C-char-array:

Code: Alles auswählen

from ctypes import c_char
array = (c_char*42)()
array[0:5] = "Hallo"; array[6:10]="Welt"
print `array.raw`
print `array.value`
Geht auch in Python < 2.6, wenn du die Abwärtskompatibilität nicht brauchst, ist bytearray vermutlich schneller.