Die Python-Funktion bytearray() erzeugt eine veränderbare Byte-Sequenz — die mutable Schwester von bytes. Sie eignet sich überall dort, wo binäre Daten in-place geändert werden sollen: Buffer für Netzwerk-/Datei-I/O, binäre Protokoll-Builder, Bild-/Audio-Bearbeitung. API-mäßig verhält sich bytearray wie bytes — plus Slot-Zuweisung, append(), extend(), pop() etc.

Einleitung

bytes ist Pythons Standard-Typ für unveränderliche Byte-Sequenzen — wie ein „Binär-String". bytearray ergänzt das um Mutability: Bytes können einzeln überschrieben oder per Slicing ersetzt werden, die Länge kann mit append, extend, pop wachsen oder schrumpfen.

Konstruktor-Varianten:

  • bytearray() — leer
  • bytearray(n) — n Null-Bytes (Pre-Allokation)
  • bytearray(iterable) — aus Iterable von Integern (0–255)
  • bytearray(string, encoding) — aus String mit Encoding

Anwendungsfälle:

  • Netzwerk-Buffer: Empfangene Bytes nach und nach anhängen.
  • Binär-Protokoll-Builder: Header schrittweise zusammensetzen.
  • In-place-Bearbeitung: XOR-Maske auf jedes Byte anwenden, ohne neue Kopien.

Syntax

Python Syntax
bytearray()
bytearray(int)              # n Null-Bytes
bytearray(iterable_of_ints) # 0..255
bytearray(string, encoding="utf-8", errors="strict")
Parameter
source

Optional: Größe (int), Iterable von Integern, String oder anderes Bytes-artiges Objekt.

encoding

Pflicht, wenn source ein String ist.

errors

(Optional) Verhalten bei Encoding-Fehlern: "strict" (default), "replace", "ignore".

Rückgabewert

Eine bytearray-Instanz.

Beispiele

Verschiedene Konstruktor-Formen

bytearray() ist sehr flexibel — die wichtigsten Wege auf einen Blick:

Python Beispiel
print(bytearray())
print(bytearray(5))
print(bytearray([72, 73]))
print(bytearray("Hi", "utf-8"))
print(bytearray(b"raw"))
Output
bytearray(b'')
bytearray(b'\x00\x00\x00\x00\x00')
bytearray(b'HI')
bytearray(b'Hi')
bytearray(b'raw')

In-place ändern

Anders als bytes lassen sich einzelne Bytes oder Slices direkt zuweisen:

Python Beispiel
ba = bytearray(b"hello")
ba[0] = ord('H')
ba[1:5] = b"appy "
print(ba)
Output
bytearray(b'Happy ')

Wachsen lassen

append, extend, += wachsen den Buffer dynamisch — perfekt für Netzwerk-Streaming:

Python Beispiel
buf = bytearray()
buf.append(0x48)
buf.extend(b"ello")
buf += b"!"
print(buf)
Output
bytearray(b'Hello!')

Praktische Beispiele

XOR-Maske in-place anwenden

Klassischer Crypto/Obfuscation-Trick: XOR jedes Byte mit einer Maske — bei bytearray ohne Kopien:

Python Beispiel
data = bytearray(b"secret")
key = 0x42
for i in range(len(data)):
    data[i] ^= key
print(data)

# Wieder zurück
for i in range(len(data)):
    data[i] ^= key
print(data)
Output
bytearray(b'1\'!4#6')
bytearray(b'secret')

Streaming-Read mit pre-allokiertem Buffer

In Performance-kritischem Code wird ein Buffer einmal allokiert und immer wieder gefüllt — bytearray macht das einfach:

Python Beispiel
buf = bytearray(4096)
with open("file.bin", "rb") as f:
    while True:
        n = f.readinto(buf)
        if not n:
            break
        process(memoryview(buf)[:n])

bytes ↔ bytearray konvertieren

Beide Typen sind zueinander kompatibel — Konvertierung ist trivial:

Python Beispiel
immutable = b"abc"
mutable = bytearray(immutable)
mutable[0] = ord('A')
print(bytes(mutable))
Output
b'Abc'

Praktische Hinweise

  • bytes ist hashable, bytearray nichtbytearray kann nicht als Dict-Key dienen.
  • Performance: In-place-Operationen sind deutlich schneller als das wiederholte Erzeugen neuer bytes-Instanzen.
  • Slot-Werte sind ints (0–255) — keine Single-Char-Strings beim Zuweisen.
  • memoryview(bytearray) liefert einen Zero-Copy-View — perfekt für Bibliotheks-APIs.
  • Verwandte Typen: bytes (immutable), memoryview (View), array.array (typisierte Arrays), io.BytesIO (in-memory binärer Stream).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht