Heim  >  Artikel  >  Backend-Entwicklung  >  Erstellt Python List Slicing Kopien oder Referenzen?

Erstellt Python List Slicing Kopien oder Referenzen?

DDD
DDDOriginal
2024-11-08 14:32:02776Durchsuche

Does Python List Slicing Create Copies or References?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn