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
1
2
3
4
5
6
data = bytearray(b'X' * 100_000_000)mv = memoryview(data)chunk = mv[1000:2000]# No data is copied herechunk[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.