Zum Inhalt springen
Python Anfänger 2 min

Variablen in Python verstehen

Lerne, wie Variablen in Python funktionieren -- von der Zuweisung ueber Namensregeln bis hin zu dynamischer Typisierung und Speicherreferenzen.

Aktualisiert:

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.

Zurück zum Python Kurs