Partielles Listen-Slicing ohne Kopieren in Python
Pythons Listen-Slicing-Vorgang generiert Verweise auf die Elemente der ursprünglichen Liste, anstatt Kopien zu erstellen. Dieses Verhalten ergibt sich aus der Tatsache, dass beim Slicing die Objektidentitäten der Elemente in der Liste erhalten bleiben.
Demonstration
Um dies zu veranschaulichen, betrachten Sie die folgende Liste:
<code class="python">L = [1000 + 1, 1000 + 1, 1000 + 1]</code>
Auch wenn diese Ganzzahlen den gleichen Wert haben, handelt es sich um unterschiedliche Objekte:
<code class="python">map(id, L) [140502922988976, 140502922988952, 140502922988928]</code>
Durch das Aufteilen der Liste werden einfach die Referenzen kopiert:
<code class="python">b = L[1:3] map(id, b) [140502922988952, 140502922988928]</code>
Speicher Overhead des Slicings
Während das Slicing keine Kopien von Objekten erstellt, beinhaltet es doch das Kopieren von Referenzen. Diese Verweise erhöhen den mit Listen verbundenen Gesamtspeicheraufwand:
<code class="python">for i in range(len(L)): x = L[:i] print('len: {}'.format(len(x))) print('size: {}'.format(sys.getsizeof(x)))</code>
Dieser Mehraufwand kann sich ansammeln, insbesondere wenn mit speicherintensiven Objekten wie großen Listen oder Wörterbüchern gearbeitet wird.
Alternative : Ansichten
Python verfügt nicht über eine einfache Möglichkeit, Ansichten oder Aliase von Listen zu erstellen. NumPy-Arrays bieten diese Funktion jedoch. Durch das Aufteilen eines NumPy-Arrays wird eine Ansicht erstellt, die den Speicher mit dem ursprünglichen Array teilt. Dies kann erheblich Speicherplatz sparen, birgt jedoch potenzielle Fallstricke beim Ändern von Objekten.
Das obige ist der detaillierte Inhalt vonErstellt Python List Slicing Kopien oder Referenzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!