Heim > Backend-Entwicklung > Python-Tutorial > Erstellt Pythons List Slicing Kopien?

Erstellt Pythons List Slicing Kopien?

Linda Hamilton
Freigeben: 2024-11-10 03:04:02
Original
591 Leute haben es durchsucht

 Does Python's List Slicing Create Copies?

Slicing-Listen in Python ohne Kopieren: Eine Erkundung

Während das Slicing-Listen den Anschein erweckt, neue Kopien zu erstellen, ist die zugrunde liegende Wahrheit eine ganz andere anders. Der Slicing-Mechanismus von Python behält die Verweise auf die Listenelemente bei, anstatt sie zu duplizieren. Dieses Verhalten gilt sowohl für unveränderliche als auch für veränderliche Werte.

Testen unveränderlicher und veränderlicher Werte

Stellen Sie sich eine Liste vor, die ganzzahlige Objekte enthält:

a = [1000 + 1, 1000 + 1, 1000 + 1]
Nach dem Login kopieren

Trotz identischer Werte ist jede Ganzzahl ein eindeutiges Objekt mit einem Unikat ID:

map(id, a)
[140502922988976, 140502922988952, 140502922988928]
Nach dem Login kopieren

Slicing der Liste:

b = a[1:3]
Nach dem Login kopieren

zeigt, dass die IDs der Objekte im Slice mit denen in der Originalliste identisch sind. Es wurden keine Kopien erstellt.

Ähnliche Werte wie Wörterbücher verhalten sich genauso:

a = [{0: 'zero', 1: 'one'}, ['foo', 'bar']]
map(id, a)
[4380777000, 4380712040]

map(id, a[1:]
... )
[4380712040]
Nach dem Login kopieren

Minimaler Speicheraufwand

While Objektreferenzen werden während des Slicings kopiert, ihre Größe bleibt konstant (8 Bytes auf einem 64-Bit-Computer). Darüber hinaus hat jede Liste einen Overhead von 72 Byte. Dieser Overhead erhöht sich mit jedem erstellten Slice:

for i in range(len(a)):
    x = a[:i]
    print('len: {}'.format(len(x)))
    print('size: {}'.format(sys.getsizeof(x)))
Nach dem Login kopieren

Trotz des Overheads ist das Slicing von Listen immer noch ein effizienterer Ansatz im Vergleich zur Erstellung völlig neuer Listen.

Views and Numpy Arrays< ;/h3>

Python bietet keine native Möglichkeit, Listenansichten zu erstellen. Numpy-Arrays bieten jedoch eine Lösung zum Speichern von Speicher, indem sie den Speicher zwischen Slices und dem ursprünglichen Array teilen. Am ursprünglichen Array vorgenommene Änderungen werden in den Slices widergespiegelt:

import numpy

a = numpy.arange(3)
b = a[1:3]

a[2] = 1001
b  # Output: array([   1, 1001])
Nach dem Login kopieren

Die Verwendung von Ansichten erfordert jedoch sorgfältige Überlegungen, um unbeabsichtigte Änderungen zu vermeiden.

Das obige ist der detaillierte Inhalt vonErstellt Pythons List Slicing Kopien?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage