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.
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.
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
Sie werden feststellen, dass die ID-Punkte von var_1 ~ var_4 gleich sind.
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.
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
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!