Erstellt Python List Slicing Kopien oder Referenzen?

DDD
Freigeben: 2024-11-08 14:32:02
Original
776 Leute haben es durchsucht

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>
Nach dem Login kopieren

Auch wenn diese Ganzzahlen den gleichen Wert haben, handelt es sich um unterschiedliche Objekte:

<code class="python">map(id, L)
[140502922988976, 140502922988952, 140502922988928]</code>
Nach dem Login kopieren

Durch das Aufteilen der Liste werden einfach die Referenzen kopiert:

<code class="python">b = L[1:3]
map(id, b)
[140502922988952, 140502922988928]</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!