capypad
0 Tage Serie
python / expert
Snippet

Zero-Copy-Slicing mit memoryview

Das memoryview-Objekt ermöglicht es Python-Code, auf die internen Daten eines Objekts zuzugreifen, das das Buffer-Protokoll unterstützt (wie bytearray), ohne diese zu kopieren. Das Slicing einer memoryview gibt eine neue memoryview zurück, die denselben zugrunde liegenden Puffer nutzt, was eine extrem effiziente Speicherbearbeitung bei großen Datensätzen ermöglicht.

snippet.py
python
1
2
3
4
5
6
data = bytearray(b'X' * 100_000_000)
mv = memoryview(data)
chunk = mv[1000:2000]
# No data is copied here
chunk[0] = ord('Y')
print(data[1000]) # Outputs: 89 ('Y')
Erklärung
1
mv = memoryview(data)
Erstellt eine Ansicht des zugrunde liegenden Speichers des bytearrays.
2
chunk = mv[1000:2000]
Erstellt einen Ausschnitt der Ansicht; dies ist eine 'Ansicht einer Ansicht' ohne Kopiervorgang.
3
chunk[0] = ord('Y')
Das Modifizieren des Ausschnitts aktualisiert direkt die ursprünglichen bytearray-Daten.