Variablen und Speicheradressen

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial werden wir uns mit Python-Variablen, Speicheradressen und den Unterschieden zwischen veränderlichen und unveränderlichen Datentypen befassen:

  • Unveränderliche Datentypen: Diese Datentypen können nach der Erstellung nicht geändert werden. Beispiele sind int, float, str, tuple und frozenset.
  • Veränderliche Datentypen: Diese Datentypen können nach der Erstellung geändert werden. Beispiele sind list, dict und set.

Bei unveränderlichen Datentypen führt jeder Änderung zur Erstellung eines neuen Objekts, während veränderliche Datentypen in-place geändert werden können. Das Verständnis dieser Unterscheidung ist von entscheidender Bedeutung, wenn es um Speicheradressen und Variablenezuweisungen geht.

Wir werden die Variablenezuweisung, die Eigenschaften von veränderlichen und unveränderlichen Datentypen und den is-Operator zum Vergleichen von Speicheradressen behandeln. Los geht's!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/BasicConceptsGroup -.-> python/variables_data_types("Variables and Data Types") python/BasicConceptsGroup -.-> python/numeric_types("Numeric Types") python/BasicConceptsGroup -.-> python/strings("Strings") python/BasicConceptsGroup -.-> python/type_conversion("Type Conversion") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/scope("Scope") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/variables_data_types -.-> lab-7849{{"Variablen und Speicheradressen"}} python/numeric_types -.-> lab-7849{{"Variablen und Speicheradressen"}} python/strings -.-> lab-7849{{"Variablen und Speicheradressen"}} python/type_conversion -.-> lab-7849{{"Variablen und Speicheradressen"}} python/lists -.-> lab-7849{{"Variablen und Speicheradressen"}} python/scope -.-> lab-7849{{"Variablen und Speicheradressen"}} python/data_collections -.-> lab-7849{{"Variablen und Speicheradressen"}} end

Variablenezuweisung und Speicheradressen

In Python sind Variablen lediglich Referenzen auf die Speicherorte, an denen Werte gespeichert sind. Wenn Sie einem Variablen einen Wert zuweisen, erstellt Python ein neues Objekt (sofern erforderlich) und lässt die Variable auf dieses Objekt verweisen.

Öffnen Sie zunächst den Python-Interpreter:

python

Schauen wir uns ein Beispiel an:

x = 10
y = x

In diesem Beispiel wird der Variable x der Wert 10 zugewiesen. Wenn wir x an y zuweisen, verweisen beide Variablen jetzt auf die gleiche Speicheradresse. Wir können dies mit der id()-Funktion überprüfen:

print(id(x))  ## Ausgabe: Speicheradresse von x
print(id(y))  ## Ausgabe: Speicheradresse von y, die der von x entsprechen sollte

Der is-Operator

In Python vergleicht der is-Operator die Speicheradressen zweier Objekte. Wenn die Speicheradressen gleich sind, gibt der is-Operator True zurück; andernfalls gibt er False zurück. Dies unterscheidet sich vom ==-Operator, der die Werte der Objekte vergleicht.

x = [1, 2, 3]
y = x
z = [1, 2, 3]

print(x is y)  ## Ausgabe: True (x und y haben die gleiche Speicheradresse)
print(x is z)  ## Ausgabe: False (x und z haben unterschiedliche Speicheradressen)

Vergleiche Speicheradressen

In diesem Schritt werden wir die Speicheradressen von Variablen mit demselben Wert vergleichen.

Befolgen Sie bitte die folgenden Anweisungen:

## Erstellen Sie zwei ganzzahlige Variablen `a` und `b` mit demselben Wert.
a = 10
b = 10
## Erstellen Sie zwei Listenvariablen `c` und `d` mit denselben Elementen.
c = [1, 2, 3]
d = [1, 2, 3]

## Vergleichen Sie die Speicheradressen von `a` und `b`, sowie `c` und `d`.
print(a is b)  ## Ausgabe: True
print(c is d)  ## Ausgabe: False

Im obigen Beispiel haben wir zwei ganzzahlige Variablen a und b mit demselben Wert erstellt.

Wir haben auch zwei Listenvariablen c und d mit denselben Elementen erstellt.

Wenn wir die Speicheradressen von a und b verglichen haben, hat der is-Operator True zurückgegeben. Dies liegt daran, dass a und b die gleiche Speicheradresse teilen.

Wenn wir jedoch die Speicheradressen von c und d verglichen haben, hat der is-Operator False zurückgegeben. Dies liegt daran, dass c und d unterschiedliche Speicheradressen haben.

Was bedeutet das nun?

  1. Unveränderliche Datentypen mit demselben Wert können die gleiche Speicheradresse haben.
  2. Veränderliche Datentypen mit demselben Wert haben unterschiedliche Speicheradressen.

Ändern eines veränderlichen Datentyps

Als nächstes werden wir gemeinsam einen veränderlichen Datentyp erstellen und ändern.

## Erstellen Sie zwei Variablen `x` und `y`, die auf die gleiche Liste verweisen.
x = [1, 2, 3]
y = x

## Ändern Sie die Liste mithilfe der Variablen `x`.
x.append(4)

## Betrachten Sie die Änderungen an der Variablen `y`.
print(y)  ## Ausgabe: [1, 2, 3, 4] (y zeigt auch die Änderungen, da x und y die gleiche Speicheradresse teilen)

In diesem Beispiel haben wir zwei Variablen x und y erstellt, die auf die gleiche Liste verweisen.

Wenn wir die Liste mithilfe der Variablen x geändert haben, wurden die Änderungen auch in der Variablen y widergespiegelt. Dies liegt daran, dass x und y die gleiche Speicheradresse teilen.

Ändern eines unveränderlichen Datentyps

Schließlich werden wir gemeinsam nacheinander einen unveränderlichen Datentyp ändern.

## Erstellen Sie zwei Variablen `a` und `b`, die auf dieselbe Zeichenkette verweisen.
a = "hello"
b = a

## Ändern Sie die Zeichenkette mithilfe der Variablen `a`.
a = a + ", world"

## Betrachten Sie die Änderungen an der Variablen `b`.
print(b)  ## Ausgabe: "hello" (b ändert sich nicht, da beim Ändern der Zeichenkette ein neues Objekt erstellt wurde)

In diesem Beispiel haben wir zwei Variablen a und b erstellt, die auf dieselbe Zeichenkette verweisen.

Wenn wir die Zeichenkette mithilfe der Variablen a geändert haben, wurden die Änderungen nicht in der Variablen b widergespiegelt. Dies liegt daran, dass a und b unterschiedliche Speicheradressen haben.

Zusammenfassung

In diesem fortgeschrittenen Tutorial haben wir tiefer in Python-Variablen und Speicheradressen eingedrungen. Wir haben die Variablenezuweisung, veränderliche und unveränderliche Datentypen sowie den is-Operator zur Vergleich von Speicheradressen besprochen. Wir haben auch diese Konzepte an praktischen Übungen erprobt. Das Verständnis dieser fortgeschrittenen Konzepte wird Ihnen helfen, ein kompetenterer Python-Programmierer zu werden, da es einen tieferen Einblick in die Verwaltung von Speicher in Python und die Funktion von Variablen gibt.