Variablen in Python verstehen
Lerne, wie Variablen in Python funktionieren -- von der Zuweisung ueber Namensregeln bis hin zu dynamischer Typisierung und Speicherreferenzen.
Was sind Variablen?
Stell dir Variablen wie beschriftete Boxen vor. Du hast eine Box, schreibst einen Namen drauf und legst etwas hinein. Spaeter kannst du den Namen rufen und bekommst den Inhalt zurueck.
name = "Anna"
alter = 25
Hier haben wir zwei “Boxen” erstellt: Eine mit dem Etikett name (Inhalt: "Anna") und eine mit dem Etikett alter (Inhalt: 25).
Aber Vorsicht — diese Analogie ist nur der Anfang. Spaeter in diesem Tutorial erfaehrst du, warum Variablen in Python eigentlich keine Boxen sind, sondern etwas viel Eleganteres.
Variablen zuweisen mit =
In Python verwendest du das Gleichheitszeichen (=), um einer Variablen einen Wert zuzuweisen. Das ist der sogenannte Zuweisungsoperator.
# Einfache Zuweisungen
vorname = "Max"
nachname = "Mustermann"
alter = 30
groesse = 1.82
ist_student = True
Wichtig: Das = in Python bedeutet nicht “ist gleich” im mathematischen Sinne. Es bedeutet: “Weise den Wert auf der rechten Seite dem Namen auf der linken Seite zu.”
# Das ist voellig okay in Python:
x = 10
x = x + 5 # x ist jetzt 15
print(x) # Ausgabe: 15
Du kannst den Wert einer Variablen jederzeit ueberschreiben:
farbe = "rot"
print(farbe) # Ausgabe: rot
farbe = "blau"
print(farbe) # Ausgabe: blau
Namensregeln fuer Variablen
Python hat klare Regeln, wie du Variablen benennen darfst:
Erlaubt
name = "Gueltig"
mein_name = "Gueltig" # snake_case -- empfohlen!
_privat = "Gueltig" # Unterstrich am Anfang
name2 = "Gueltig" # Zahl am Ende
meinLangerName = "Gueltig" # camelCase (funktioniert, aber nicht empfohlen)
Nicht erlaubt
2name = "Fehler!" # Darf NICHT mit einer Zahl beginnen
mein-name = "Fehler!" # Keine Bindestriche
mein name = "Fehler!" # Keine Leerzeichen
class = "Fehler!" # Reserviertes Wort
Die Python-Konvention: snake_case
In Python verwenden wir snake_case fuer Variablennamen — also Kleinbuchstaben mit Unterstrichen:
# So machen es Python-Profis:
benutzer_name = "admin"
max_versuche = 3
ist_eingeloggt = False
geburts_datum = "15.03.1990"
Mehrfachzuweisung
Python erlaubt elegante Kurzformen bei der Zuweisung:
# Mehrere Variablen auf einmal
a, b, c = 1, 2, 3
print(a) # 1
print(b) # 2
print(c) # 3
# Gleicher Wert fuer mehrere Variablen
x = y = z = 0
print(x, y, z) # 0 0 0
# Praktisch: Werte tauschen
a = "links"
b = "rechts"
a, b = b, a
print(a) # rechts
print(b) # links
Das Tauschen von Variablen ohne temporaere Variable ist ein echter Python-Klassiker! In anderen Sprachen brauchst du dafuer eine Hilfsvariable.
Die type() Funktion
Mit type() kannst du jederzeit herausfinden, welchen Datentyp eine Variable hat:
name = "Python"
alter = 25
preis = 9.99
aktiv = True
print(type(name)) # <class 'str'>
print(type(alter)) # <class 'int'>
print(type(preis)) # <class 'float'>
print(type(aktiv)) # <class 'bool'>
Das ist besonders nuetzlich beim Debuggen, wenn du dir nicht sicher bist, welchen Typ eine Variable gerade hat:
ergebnis = 10 / 3
print(ergebnis) # 3.3333333333333335
print(type(ergebnis)) # <class 'float'> -- Aha! Division ergibt immer float
Die id() Funktion — Speicheradressen
Jedes Objekt in Python hat eine eindeutige Identitaet (eine Art Speicheradresse). Mit id() kannst du diese sichtbar machen:
a = 42
b = 42
print(id(a)) # z.B. 140234866879024
print(id(b)) # z.B. 140234866879024 -- gleiche Adresse!
print(a is b) # True -- beide zeigen auf dasselbe Objekt
Warum haben a und b die gleiche ID? Das fuehrt uns zum naechsten und wichtigsten Punkt…
Variablen sind Referenzen, nicht Boxen!
Jetzt wird es spannend. Die “beschriftete Box”-Analogie von oben ist nicht ganz korrekt. In Wirklichkeit funktionieren Python-Variablen so:
Eine Variable ist ein Namensschild, das auf ein Objekt im Speicher zeigt (eine Referenz).
a = [1, 2, 3]
b = a # b zeigt auf DASSELBE Objekt wie a
b.append(4)
print(a) # [1, 2, 3, 4] -- Ueberraschung!
print(b) # [1, 2, 3, 4]
Was ist passiert? Beide Variablen a und b zeigen auf dieselbe Liste im Speicher. Wenn du die Liste ueber b aenderst, sieht a die Aenderung auch.
Speicher:
a ----\
----> [1, 2, 3, 4] (ein einziges Listen-Objekt)
b ----/
Wenn du eine unabhaengige Kopie willst:
a = [1, 2, 3]
b = a.copy() # oder: b = list(a) oder b = a[:]
b.append(4)
print(a) # [1, 2, 3] -- unveraendert!
print(b) # [1, 2, 3, 4]
Bei einfachen Datentypen (int, float, str, bool) merkst du diesen Unterschied nicht, weil sie unveraenderlich (immutable) sind:
a = 10
b = a
b = 20 # b zeigt jetzt auf ein NEUES Objekt
print(a) # 10 -- unveraendert
print(b) # 20
Dynamische Typisierung
Python ist dynamisch typisiert. Das bedeutet: Du musst den Typ einer Variable nicht vorher angeben — Python erkennt ihn automatisch.
# Die Variable x aendert ihren Typ zur Laufzeit:
x = 42 # int
print(type(x)) # <class 'int'>
x = "Hallo" # jetzt str
print(type(x)) # <class 'str'>
x = 3.14 # jetzt float
print(type(x)) # <class 'float'>
x = True # jetzt bool
print(type(x)) # <class 'bool'>
In Sprachen wie Java oder C++ musst du den Typ vorher festlegen:
// Java -- so NICHT in Python
int alter = 25;
String name = "Max";
In Python faellt das weg — flexibel, aber auch mit Verantwortung: Du solltest immer wissen, welchen Typ deine Variablen haben.
Konstanten — Konvention mit GROSSBUCHSTABEN
Python hat keine echten Konstanten. Es gibt keine Moeglichkeit, eine Variable wirklich “schreibgeschuetzt” zu machen. Stattdessen gibt es eine Namenskonvention:
# GROSSBUCHSTABEN signalisieren: "Bitte nicht aendern!"
MAX_VERSUCHE = 3
PI = 3.14159265
DATENBANK_URL = "localhost:5432"
STANDARD_FARBE = "#FF5733"
Wenn ein anderer Entwickler MAX_VERSUCHE sieht, weiss er: Das soll nicht veraendert werden. Technisch kann man es aendern, aber man sollte es nicht tun.
MAX_VERSUCHE = 3
# Das funktioniert, ist aber schlechter Stil:
MAX_VERSUCHE = 99 # Bitte nicht machen!
Reservierte Woerter (Keywords)
Python hat bestimmte Woerter, die du nicht als Variablennamen verwenden darfst, weil sie eine besondere Bedeutung in der Sprache haben:
import keyword
print(keyword.kwlist)
Hier die vollstaendige Liste:
False True None and as
assert async await break class
continue def del elif else
except finally for from global
if import in is lambda
nonlocal not or pass raise
return try while with yield
Versuchst du, eines dieser Woerter als Variablenname zu benutzen, gibt es einen SyntaxError:
class = "Mathe" # SyntaxError: invalid syntax
return = 42 # SyntaxError: invalid syntax
Ein haeufiger Fallstrick ist list oder print — das sind zwar keine Keywords, aber eingebaute Funktionen. Du kannst sie ueberschreiben, solltest es aber nicht:
# Schlecht: eingebaute Funktion ueberschrieben
list = [1, 2, 3]
# Jetzt funktioniert list() nicht mehr!
neue_liste = list("abc") # TypeError!
Uebungen
Uebung 1: Variablen erstellen
Erstelle Variablen fuer eine Person mit den folgenden Informationen und gib alles mit print() aus:
- Vorname: Maria
- Nachname: Schmidt
- Alter: 28
- Groesse in Metern: 1.68
- Ist Studentin: Ja
# Deine Loesung hier:
vorname = "Maria"
nachname = "Schmidt"
alter = 28
groesse = 1.68
ist_studentin = True
print(f"{vorname} {nachname}, {alter} Jahre, {groesse}m")
print(f"Studentin: {ist_studentin}")
Uebung 2: Variablen tauschen
Tausche die Werte von a und b, ohne eine Hilfsvariable zu verwenden:
a = "Apfel"
b = "Birne"
# Deine Loesung hier:
a, b = b, a
print(a) # Birne
print(b) # Apfel
Uebung 3: Typen untersuchen
Finde den Typ jeder Variable heraus und ueberlege vorher, was type() zurueckgeben wird:
wert1 = 42
wert2 = 42.0
wert3 = "42"
wert4 = True
wert5 = None
print(type(wert1)) # ?
print(type(wert2)) # ?
print(type(wert3)) # ?
print(type(wert4)) # ?
print(type(wert5)) # ?
Uebung 4: Referenzen verstehen
Was gibt der folgende Code aus? Ueberlege erst, bevor du ihn ausfuehrst:
liste_a = [10, 20, 30]
liste_b = liste_a
liste_b.append(40)
print(liste_a)
print(liste_a is liste_b)
Pro-Tipp: Saubere Variablennamen machen den Unterschied
Einer der haeufigsten Fehler von Anfaengern ist die Verwendung von nichtssagenden Variablennamen wie x, temp oder data. Nimm dir die extra Sekunde und waehle sprechende Namen:
# Schlecht
x = 25
y = "Max"
z = True
# Gut
alter = 25
vorname = "Max"
ist_aktiv = True
Dein zukuenftiges Ich wird es dir danken, wenn du den Code in drei Monaten wieder liest. Eine Faustregel: Wenn du einen Kommentar brauchst, um zu erklaeren, was eine Variable enthaelt, ist der Name nicht gut genug.