Heim > Backend-Entwicklung > Python-Tutorial > Häufig gestellte Fragen zum Python-Interview: Der Unterschied zwischen veränderlichen Datentypen und unveränderlichen Datentypen

Häufig gestellte Fragen zum Python-Interview: Der Unterschied zwischen veränderlichen Datentypen und unveränderlichen Datentypen

WBOY
Freigeben: 2023-05-19 16:04:06
nach vorne
1247 Leute haben es durchsucht

Python 面试高频问题:可变数据类型和不可变数据类型的区别

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.

Referenzen

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:

Python 面试高频问题:可变数据类型和不可变数据类型的区别

Unveränderlicher Datentyp

Wir nehmen eine Zeichenfolge als Beispiel und gehen direkt zum Code:

s1="abc"
print(id(s1))
s1="xyz"
print(id(s1))
Nach dem Login kopieren

Ausgabe:

140712532603136
140712532603168
Nach dem Login kopieren

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))
Nach dem Login kopieren

Ausgabe:

743316570224
743316570224
Nach dem Login kopieren

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)
Nach dem Login kopieren

Ausgabe:

879864758384
xyz
879889887984
def
Nach dem Login kopieren

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!

Variabler Datentyp

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))
Nach dem Login kopieren

Ausgabe:

405927907912
405927907912
405927907912
405927907912
Nach dem Login kopieren

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)
Nach dem Login kopieren

Ausgabe:

838366483528
838366483528
************
838366483528
['a', 'b', 'c', 'd']
838366483528
['a', 'b', 'c', 'd']
Nach dem Login kopieren

Das Ausgabeergebnis wird hier nicht erklärt, da die Adressen von l1 und l2 gleich sind und sich daher gegenseitig beeinflussen.

Kopieren der Liste

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)
Nach dem Login kopieren

Ausgabe:

831456302152
831480344136
['x', 'y', 'z']
['x', 'y', 'z', 'a']
Nach dem Login kopieren

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!

Quelle:51cto.com
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