Heim > Artikel > Backend-Entwicklung > Erstellt Pythons List Slicing Kopien?
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.
Stellen Sie sich eine Liste vor, die ganzzahlige Objekte enthält:
a = [1000 + 1, 1000 + 1, 1000 + 1]
Trotz identischer Werte ist jede Ganzzahl ein eindeutiges Objekt mit einem Unikat ID:
map(id, a) [140502922988976, 140502922988952, 140502922988928]
Slicing der Liste:
b = a[1:3]
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]
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)))
Trotz des Overheads ist das Slicing von Listen immer noch ein effizienterer Ansatz im Vergleich zur Erstellung völlig neuer Listen.
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])
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!