Eine kurze Einführung in Zuweisung, flaches Kopieren und tiefes Kopieren in Python (Beispiel)

不言
Freigeben: 2018-08-30 10:11:40
Original
1302 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine kurze Einführung (Beispiel) über Zuweisung, flaches Kopieren und tiefes Kopieren. Ich hoffe, dass er für Freunde hilfreich ist.

Beim Schreiben des Diktatdatentyps haben wir die „Zuweisungsanweisung“ und die Funktion copy() erwähnt.
Tatsächlich müssen Sie beim tiefen und flachen Kopieren den spezifischen Datentyp berücksichtigen. Ein Teil sind unveränderliche Objekte wie Zahlen und Zeichenfolgen; der andere Teil sind veränderliche Objekte wie Listen, Wörterbücher usw.

1. Definition und Erklärung

  • Variable: Ein Systemtabellenelement, das auf den Verbindungsraum des Objekts zeigt.

  • Objekt: Ein Speicherbereich, der zum Speichern seines tatsächlichen Werts zugewiesen ist.

  • Referenz: Zeiger von Variable auf Objekt.

  • Unveränderliche Objekte: Sobald sie erstellt wurden, können sie nicht mehr geändert werden, z. B. Zahlen, Zeichenfolgen und Tupel.

  • Veränderbare Objekte: Objekte, die geändert werden können, wie z. B. Listen und Wörterbücher.

  • Zuweisung: wird durch die Anweisung „=" erreicht. Die linke Seite ist die neu erstellte Variable und die rechte Seite kann der direkte Inhalt oder die vorhandene Variable sein. Es handelt sich um einen Verweis auf das Objekt. Python kopiert das Objekt nicht, sondern kopiert nur den Verweis auf das Objekt. Die neue Variable zeigt auf die Speicheradresse der Quellvariablen.

  • Flache Kopie: Ein Objekt kopieren. Das äußerste Objekt selbst wird kopiert und die internen Elemente werden nur mit einer Referenz kopiert. Das heißt, es wird ein neues Objekt erstellt, dessen Typ mit dem Originalobjekt übereinstimmt und dessen Inhalt eine Referenz auf das Originalobjekt ist. [Das flache Kopierobjekt ist neu und der Referenzinhalt des Objekts ist alt. 】
    Mehrere Möglichkeiten, flache Kopien zu implementieren: (1) Slice: [:]; (2) Factory-Funktionen wie list(), dict(); (3) Verwenden Sie copy().

  • Tiefe Kopie: Sowohl äußere als auch innere Elemente kopieren das Objekt selbst, nicht die Referenz. Das heißt, das Objekt wird einmal kopiert und andere im Objekt referenzierte Objekte werden ebenfalls kopiert.

2. Unveränderliche Objekte

Für unveränderliche Objekte wie Zahlen und Zeichenfolgen gibt es keinen Unterschied zwischen copy()) und deepcopy(), da ihre Objektreferenzen immer auf dieselbe Speicheradresse verweisen.
Demonstrieren Sie anhand von Beispielen:

>>> var_1 = 123
>>> id(var_1)            # 通过id()查看地址
1615552144
>>> var_2 = var_1
>>> id(var_2)
1615552144
>>>
>>> import copy        # 浅、深拷贝需要导入copy模块
>>> var_3 = copy.copy(var_1)
>>> id(var_3)
1615552144
>>>
>>> var_4 = copy.deepcopy(var_1)
>>> id(var_4)
1615552144
Nach dem Login kopieren

Sie werden feststellen, dass die ID-Punkte von var_1 ~ var_4 gleich sind.

3. Variable Objekte

Für Datentypen wie Liste und Diktat weisen Zuweisung, flache Kopie und tiefe Kopie unterschiedliche Änderungen in den Speicheradressen auf.
Zuweisung flache Kopie: Gleiche Werte, gleiche Adressen;
flache Kopie kopieren: Gleiche Werte, aber ungleiche Adressen;
tiefe Kopie: Die Werte sind gleich, die Adressen jedoch nicht; Beispiel 1:

base[0]='name', ein unveränderliches String-Objekt; 1]=[ 'Alter',18], ist eine Liste, ein veränderliches Objekt. base_1 und base_2 sind beide flache Kopien von base und die drei haben die gleiche id(). Wenn unterschiedliche Änderungen am ersten Zeichenfolgenelement vorgenommen werden, wird festgestellt, dass die IDs unterschiedlich sind und sich nicht gegenseitig beeinflussen, da die Zeichenfolge (unveränderlich) kopiert und angezeigt wird und bei Änderung ein neues Zeichenobjekt erstellt wird.
Beim Ändern des zweiten Listenelements werden unterschiedliche Änderungen nur bei der letzten Änderung wirksam und wirken sich gegenseitig aus, da das zweite Listenelement einfach seine Referenz kopiert.


Eine kurze Einführung in Zuweisung, flaches Kopieren und tiefes Kopieren in Python (Beispiel)Beispiel 2: Deep Copy

Erstellen Sie ein Wörterbuchobjekt und verwenden Sie Deep Copy, um ein neues Objekt zu erstellen.

>>>import copy
>>> var = {"a":1,"b":2,"c":[3,'abc']}
>>> var1 = copy.deepcopy(var)
>>> id(var),id(var1)
(17616992, 15671136)            # 地址不相同
>>> id(var['c']),id(var1['c'])
(15695144, 15695384)        
>>> id(var['c'][0]),id(var1['c'][0])
(1615550224, 1615550224)        # ‘c’元素的内存地址是相同的
>>>
>>> var1['c'][0] = 4
>>> var
{'a': 1, 'b': 2, 'c': [3, 'abc']}
>>> var1
{'a': 1, 'b': 2, 'c': [4, 'abc']}
>>> id(var['c'][0]),id(var1['c'][0])
(1615550224, 1615550240)        # 对var1的修改没有影响var
Nach dem Login kopieren
Verwandte Empfehlungen:

Zuweisungsoperatoren in Python organisieren


Zuweisung, flache Kopie, tiefe Kopie in Python Einführung in die Kopie

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in Zuweisung, flaches Kopieren und tiefes Kopieren in Python (Beispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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!