Python-Variablendatentypen und unveränderliche Datentypen sind ein grundlegender und wichtiger Testpunkt. Einfach ausgedrückt: Die Variablen hier sind variabel und unveränderlich und beziehen sich darauf, ob sich die Adresse der Daten ändert, wenn sich die Variable ändert!
Variablendatentyp: Wenn der Wert einer Variablen geändert wird, entspricht dies der Erstellung eines neuen Objekts (dh die Adresse wird geändert).
Variablendatentyp: Der Wert der Variablen ändert sich, aber die Adresse des Objekts ändert sich nicht.
Unveränderliche Datentypen: Tupel, String, numerischer Wert.
Variable Datentypen: Wörterbuch, Liste, Satz.
Bevor wir über veränderliche Datentypen und unveränderliche Datentypen sprechen, müssen wir über das Konzept der Referenzen sprechen. Python-Variablen speichern Verweise auf Objekte, die auf Objekte im Heap-Speicher verweisen. Im Heap zugewiesene Objekte sind in zwei Kategorien unterteilt: veränderliche Objekte und unveränderliche Objekte. Beispiel: s1="abc".
Tatsächlich ist die Variable s1 eine Referenz auf das Objekt abc s1, das auf die Speicheradresse zeigt, in der abc gespeichert ist. Wenn Sie den Adresswert von s1 sehen möchten, können Sie die Funktion id verwenden, die die Adresse konvertiert Wert in Dezimalzahl umwandeln. Verwenden Sie einfach print(id(s1)), wie in der Abbildung unten gezeigt:
Wir nehmen eine Zeichenfolge als Beispiel und gehen direkt zum Code:
s1="abc" print(id(s1)) s1="xyz" print(id(s1))
Ausgabe:
140712532603136 140712532603168
Sie Sie können die Änderungen anhand des Ausgabeergebnisses sehen. Der Wert und die Adresse von Variablen vom Typ Zeichenfolge ändern sich ebenfalls entsprechend.
Schauen wir uns als nächstes dieses Beispiel an, eine Frage, die auch oft in schriftlichen Interviews gestellt wird.
#Schreiben Sie basierend auf dem obigen Code den folgenden Code:
s2=s1 print(id(s1)) print(id(s2))
Ausgabe:
743316570224 743316570224
Sie können sehen, dass s2=s1 tatsächlich auf dieselbe Adresse sowohl s2 als auch s1 zeigt.
Lassen Sie uns fortfahren und den Wert von s2 ändern.
s2="def" print(id(s1)) print(s1) print(id(s2)) print(s2)
Ausgabe:
879864758384 xyz 879889887984 def
Wenn wir das sehen, können wir verstehen, warum eine Änderung des Werts von s2 keinen Einfluss auf den Wert von s1 hat. Da s1 und s2 auf unterschiedliche Adressen zeigen, wurde der Wert von s1 nicht geändert!
Wir nehmen eine Liste als Beispiel:
l = [1, 2, 3] print(id(l)) l.remove(1) # 删除元素 print(id(l)) l.append(4) # 增加元素 print(id(l)) l[1] = '8' # 修改元素 print(id(l))
Ausgabe:
405927907912 405927907912 405927907912 405927907912
Sie können sehen, dass sich die Adresse der Liste nicht ändert, aber der Wert von Wenn die Variable geändert wird und kein neues Objekt erstellt wird, ändert sich die Adresse des Objekts, auf das die Variable verweist, nicht.
Schauen Sie sich noch einmal das folgende Beispiel an, das dem vorherigen Beispiel für die Zeichenfolgenzuweisung ähnelt.
l1=['a','b','c'] l2=l1 print(id(l1)) print(id(l2)) l2.append('d') print("************") print(id(l1)) print(l1) print(id(l2)) print(l2)
Ausgabe:
838366483528 838366483528 ************ 838366483528 ['a', 'b', 'c', 'd'] 838366483528 ['a', 'b', 'c', 'd']
Das Ausgabeergebnis wird hier nicht erklärt, da die Adressen von l1 und l2 gleich sind und sich daher gegenseitig beeinflussen.
Einige Schüler fragen sich vielleicht, wie Sie das tun sollen, wenn Sie die Liste wie eine Zeichenfolge kopieren und zwei Listen mit demselben Wert, aber unterschiedlichen Adressen erstellen möchten. Tatsächlich liegt der Kern dieses Problems im Unterschied zwischen der direkten Zuweisung einer Liste (verwenden Sie = für die direkte Zuweisung) und dem Kopieren (das Kopieren ist in flaches Kopieren und tiefes Kopieren unterteilt). Ich werde einen weiteren Artikel schreiben, um das relevante Wissen über flaches Kopieren einzuführen und ausführliche Kopie. Bitte achten Sie weiterhin darauf.
Hier stellen wir zunächst eine relativ einfache Methode zum Kopieren vor, die den list()-Konstruktor verwendet. Der Code lautet wie folgt:
l3=['x','y','z'] l4=list(l3) print(id(l3)) print(id(l4)) l4.append('a') print(l3) print(l4)
Ausgabe:
831456302152 831480344136 ['x', 'y', 'z'] ['x', 'y', 'z', 'a']
Wie Sie den Ergebnissen entnehmen können, sind die Adressen von l3 und l4 unterschiedlich , sodass sie nicht miteinander interagieren. Wir können die beiden Listen auch dazu bringen, auf unterschiedliche Listenobjekte zu verweisen, indem wir Indizes, Listengenerierung, copy() usw. verwenden, die ich hier nicht einzeln vorstellen werde!
Das obige ist der detaillierte Inhalt vonHäufig gestellte Fragen zum Python-Interview: Der Unterschied zwischen veränderlichen Datentypen und unveränderlichen Datentypen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!