Python # Über Referenz und Kopie

Variablen sind möglicherweise keine reellen Werte

Beim Umgang mit bestimmten Typen wie list und dictionary beziehen sich Variablen im Gegensatz zu Wertentitäten auf Entitäten. Die Eigenschaften der Variablen können anhand der Ausführungsergebnisse der folgenden Programme bestätigt werden.

l1 = []
l1.append(0)

l2 = l1
l2.append(1)

print('l1 = ' ,l1)
print('l2 = ' ,l2)

Ausführungsergebnis

l1 = [0, 1] l2 = [0, 1]

Nachdem ich die Liste "l1" in die Liste "l2" eingesetzt hatte, fügte ich nur "l2" einen Wert hinzu, aber "l1" wurde ein ähnlicher Wert hinzugefügt. Dies liegt daran, dass die Referenzinformationen sowohl "l1" als auch "l2" enthalten und die Entitäten am Ziel der Referenz dasselbe gemeinsam haben.

Kopieren Sie die Entität selbst

Die Methode "copy ()" wird verwendet, um das Problem zu lösen, dass der Wert selbst nicht nur durch Zuweisen kopiert wird.

l1 = []
l1.append(0)

l3 = l1.copy()
l3.append(1)

print('l1 = ' ,l1)
print('l3 = ' ,l3)

Ausführungsergebnis

l1 = [0] l3 = [0, 1]

Selbst wenn die Methode "copy ()" verwendet wird und das Element der Liste eine Referenz ist, wird das Referenzziel nicht kopiert.

l4 = [[]]
l4[0].append(0)

l5 = l4.copy()
l5[0].append(1)

print('l4 = ' ,l4)
print('l5 = ' ,l5)

Ausführungsergebnis

l4 = [[0, 1]] l5 = [[0, 1]]

Wenn Sie alle Referenzziele der in der Liste enthaltenen Elemente kopieren möchten, verwenden Sie die im Paket "copy" enthaltene Methode "deepcopy ()".

import copy

l4 = [[]]
l4[0].append(0)

l6 = copy.deepcopy(l4)
l6[0].append(1)

print('l4 = ' ,l4)
print('l6 = ' ,l6)

Ausführungsergebnis

l4 = [[0]] l6 = [[0, 1]]

Recommended Posts

Python # Über Referenz und Kopie
Informationen zur Python-Referenz
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
Flache Python-Kopie und tiefe Kopie
Flache Python-Kopie und tiefe Kopie
Über Python, len () und randint ()
Über Python und reguläre Ausdrücke
Informationen zu Python- und Betriebssystemoperationen
Über Python sort () und reverse ()
Über _ und __
Über Python-Diktat und sortierte Funktionen
Über Python und Cython dtype
Über Python Pickle (cPickle) und Marschall
[Python] Über Executor und zukünftige Klassen
Über Python, aus und importieren, als
Reputation von Python-Büchern und Nachschlagewerken
Über Python-Slices
Über die Einschlussnotation von Python
Über den Referenztyp
Über Python tqdm.
Über Python, Klasse
Kopieren Sie die Datei und schreiben Sie den Zellenwert @python neu
Informationen zur Python-Vererbung
Über Python, range ()
Kopie von Python
Eine Geschichte über Python Pop und Append
Über Python-Dekorateure
Python-Referenzseite
[Python] Über Multi-Prozess
Apropos alte und neue Klassen in Python
Apropos Python-Klassenattribute und Metaklassen
Über das Verhalten von copy, deepcopy und numpy.copy
Denken Sie an Suchvorgänge mit Tiefenpriorität und Breitenpriorität in Python
Über den Unterschied zwischen "==" und "is" in Python
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
[Python] Komprimieren und dekomprimieren
Über Python für Schleife
Über Klasse und Instanz
Über Funktionsargumente (Python)
Python- und Numpy-Tipps
[Python] Pip und Wheel
Kopie der Python-Einstellungen
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Ruby, Python und Map
Über Cumprod und Cummax
Über Python für ~ (Bereich)
Python-Eingabe und Ausgabe
[Python] Memo Über Fehler
Python und Ruby teilen sich
Informationen zur Python-Entwicklungsumgebung
Python: Über Funktionsargumente
Python, über die Ausnahmebehandlung
Über Python3 ... (Ellipsenobjekt)
[Python] Informationen zur Standardeingabe