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

Erstellt Python List Slicing Kopien von Objekten?

Susan Sarandon
Freigeben: 2024-11-06 07:01:03
Original
1060 Leute haben es durchsucht

 Does Python List Slicing Create Copies of Objects?

Slicing-Listen in Python: Aufrechterhaltung der Objektintegrität

Obwohl es logisch erscheinen mag anzunehmen, dass Slicing-Listen in Python Kopien davon erstellen enthaltene Objekte, das ist eigentlich nicht der Fall. Stattdessen werden durch das Slicing einfach neue Listen erstellt, die auf dieselben zugrunde liegenden Objekte verweisen. Diese Erkennung spielt eine entscheidende Rolle beim Verständnis des List-Slicing-Mechanismus von Python.

Unveränderlichkeit in Aktion

Betrachten Sie eine Liste von ganzen Zahlen:

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

Obwohl diese Objekte den gleichen Wert haben, handelt es sich um unterschiedliche Einheiten mit eindeutigen IDs, wie durch Folgendes belegt:

map(id, [1000 + 1, 1000 + 1, 1000 + 1])
Nach dem Login kopieren

Durch das Aufteilen dieser Liste bleibt die Integrität dieser Referenzen erhalten:

b = [1000 + 1, 1000 + 1, 1000 + 1][1:3]
map(id, b)
Nach dem Login kopieren

Die Ausgabe beider Kartenoperationen ist identisch, was bestätigt, dass das Slice keine neuen Kopien der ganzen Zahlen generiert.

Veränderliche Objekte verhalten sich ähnlich

Es wird ein ähnliches Verhalten beobachtet mit veränderlichen Objekten wie Wörterbüchern oder Listen:

a = [{0: 'zero', 1: 'one'}, ['foo', 'bar']]
map(id, a[1:])
Nach dem Login kopieren

Das Slice behält weiterhin die ursprünglichen Referenzen bei, was zeigt, dass das Slicing kein Kopiervorgang ist.

Der Aufwand des Kopierens< ;/h3>

Während das Slicen nicht das Kopieren der Objekte selbst beinhaltet, kopiert es doch die Referenzen. Jede Referenz belegt auf 64-Bit-Maschinen 8 Bytes, und jede Liste hat zusätzlich 72 Bytes Overhead:

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

Trotzdem stellt dieser Overhead für die meisten Anwendungen im Allgemeinen kein großes Problem dar.

Eine Alternative: Ansichten

Obwohl Python keine direkte Unterstützung für Ansichten hat, können alternative Optionen wie Numpy-Arrays verwendet werden, um eine Speicheroptimierung zu erreichen. Durch das Slicing von Numpy-Arrays werden Ansichten erstellt, die den Speicher mit dem Original teilen, was den Overhead reduziert, aber das Potenzial für unbeabsichtigte Änderungen birgt.

Zusammenfassend lässt sich sagen, dass beim Slicing von Listen in Python die Verweise auf die enthaltenen Objekte erhalten bleiben und kostspielige Kopiervorgänge vermieden werden. Dieser Mechanismus vereinfacht die Codepflege, indem er sicherstellt, dass Slices die an der ursprünglichen Liste vorgenommenen Änderungen widerspiegeln. Während der Speicheraufwand eine Rolle spielt, stellt er für die meisten praktischen Anwendungen normalerweise kein großes Problem dar.

Das obige ist der detaillierte Inhalt vonErstellt Python List Slicing Kopien von Objekten?. 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