Variablen und Datentypen

Wie Python sich Dinge merkt — und welche Schubladen es dafür hat.

Grundlagen 12 min Einsteiger 26. April 2026

Jedes Python-Programm beginnt gleich: Du gibst einem Stück Daten einen Namen. name = "Ada", punkte = 95, bestanden = True. Diese scheinbar simplen Zeilen werfen Fragen auf, an denen jeder Anfänger irgendwann stolpert: Warum stürzt "5" + 3 ab? Warum liefert input() Text, obwohl der Nutzer eine Zahl eingetippt hat? Und warum verändert sich manchmal eine Variable, wenn du eine andere änderst?

Dieser Artikel beantwortet alle drei Fragen, indem er erklärt, was Variablen wirklich sind (Namen, keine Behälter), was Datentypen wirklich tun (die Spielregeln für deine Daten festlegen) und wie du zwischen Typen übersetzt, wenn Python sich weigert, sie zu mischen.

Variablen: Namen für Werte im Speicher

Variable

AnalogieDefinition
Stell dir ein Lagerhaus voller Kisten vor. Jede Kiste ist ein Objekt: Sie hat einen festen Platz im Regal (Identität), ein Etikett, das sagt, was drin ist (Typ), und den eigentlichen Inhalt (Wert). Eine Variable ist ein Klebezettel, den du an eine Kiste heftest. Der Zettel sagt "alter" und klebt an der Kiste mit der Aufschrift "Integer, Wert 25". Du kannst den Zettel abziehen und an eine andere Kiste kleben, das ist Neuzuweisung. Du kannst auch mehrere Zettel auf dieselbe Kiste kleben, dann zeigen zwei Variablen auf dasselbe Objekt.

Die Kisten-Analogie bricht an zwei Stellen: Erstens haben echte Kisten eine feste Größe, aber Python-Objekte wie Listen können dynamisch wachsen. Zweitens verschwinden verlassene Kisten im Lagerhaus nicht von selbst, in Python aber schon (Garbage Collection).

Schritt für Schritt: Zuweisung verfolgen

1
x = 10 — Python erstellt ein Integer-Objekt 10 und heftet den Zettel "x" daran
2
y = x — Python heftet einen zweiten Zettel "y" an dasselbe Objekt 10
3
x = "hallo" — Python erstellt ein String-Objekt und klebt "x" um; y bleibt bei 10
4
print(x) — Ausgabe: "hallo" (x zeigt jetzt auf den String)
5
print(y) — Ausgabe: 10 (y zeigt immer noch auf das Integer-Objekt)

Entscheidend: y = x kopiert nicht den Wert, sondern lässt y auf dasselbe Objekt zeigen. Die Neuzuweisung von x betrifft y nicht, weil Integers unveränderlich sind.

= ist nicht gleich ==

Ein einzelnes = bedeutet in Python "weise zu", nicht "ist gleich". Für Gleichheitsvergleiche verwendest du ==. Schreibst du versehentlich if x = 5: statt if x == 5:, bekommst du einen Syntaxfehler. Diese Verwechslung ist einer der häufigsten Anfängerfehler.

Vorsicht bei veränderlichen Objekten

Bei veränderlichen Objekten wie Listen kann eine Änderung über einen Namen auch über den anderen sichtbar sein: zahlen = [1, 2, 3] und dann kopie = zahlen führt dazu, dass kopie.append(4) auch zahlen verändert, weil beide auf dasselbe Objekt zeigen. Mehr dazu im Artikel über Listen.

Datentypen: Die Sprache deiner Daten

Datentyp

AnalogieDefinition
Stell dir Werkstoffe und Werkzeuge vor: Objekte bestehen aus bestimmten Materialien — Holz (Integer), Wasser (String), Metall (Float). Operatoren wie + sind Werkzeuge. Zwei Holzstücke kannst du mit Leim verbinden (Addition). Aber Holz und Wasser kannst du nicht verleimen (TypeError). Der Datentyp ist der Werkstoff — er bestimmt, welches Werkzeug funktioniert. Die Variable ist weiterhin nur der Klebezettel, der am Holz oder am Wasser klebt.

Echte Werkstoffe kann man manchmal doch kombinieren (Holz und Metall verschrauben). In Python ist die Trennung strikter: str + int ist immer ein Fehler, ohne Ausnahme. Außerdem können echte Materialien nicht plötzlich ihren Werkstoff wechseln — in Python kann ein Objekt durch Casting aber einen neuen Typ bekommen.

str Text in Anführungszeichen: "Hallo", 'Python'
int Ganze Zahlen: 0, 42, -7
float Dezimalzahlen: 3.14, -0.5, 1e6
bool Wahrheitswerte: True oder False
String "42"

"42" + "8" ergibt "428" (Verkettung) type("42") ergibt <class 'str'>

Integer 42

42 + 8 ergibt 50 (Addition) type(42) ergibt <class 'int'>

TypeError: Python rät nicht

Wenn du Typen mischst, die nicht zusammenpassen, verweigert Python die Operation mit einem TypeError, statt zu raten. Das schützt dich vor versteckten Fehlern.

"42" + 8      # TypeError: kann str und int nicht addieren
"Alter: " + 25  # TypeError: str + int nicht erlaubt

type() als Debugging-Werkzeug

text = "Die Antwort ist: "
zahl = 42
print(type(text))   # <class 'str'>
print(type(zahl))   # <class 'int'>

Wenn eine Operation unerwartet fehlschlägt, ist type() deine erste Anlaufstelle: Prüfe, welchen Typ deine Variable tatsächlich hat.

Interaktiv: Typ-Erkennung

Tippe einen Python-Ausdruck in das Eingabefeld — eine Zahl, einen Text in Anführungszeichen, True oder eine Liste — und sieh sofort, welchen Datentyp Python erkennt und welche Operationen damit möglich sind. Achte besonders darauf, wie sich "42" (String) von 42 (Integer) unterscheidet.

Typ-Erkennung

type(42)<class 'int'>

Ganze Zahl ohne Dezimalstelle. Python-Integers können beliebig groß werden.

Typische Operationen:Addition (+), Subtraktion (-), Multiplikation (*), Division (/), Ganzzahldivision (//), Modulo (%)
Probiere diese Beispiele:

Typumwandlung (Casting): Zwischen Typen übersetzen

Typumwandlung (Casting)

AnalogieDefinition
Stell dir Casting als Übersetzung zwischen Sprachen vor. Die Zahl 42 ist wie das Konzept "zweiundvierzig", unabhängig von der Sprache. int(42) ist das Konzept in "Zahlensprache", str(42) in "Textsprache" und float(42) in "Dezimalsprache". Die Übersetzung funktioniert, wenn die Bedeutung übertragbar ist: "42" kann in 42 übersetzt werden. Aber "hallo" kann nicht in eine Zahl übersetzt werden, genau wie ein Übersetzer sagen würde: "Dieses Wort hat kein Äquivalent."

Die Übersetzungs-Analogie bricht an einer wichtigen Stelle: int(3.99) verliert die Nachkommastellen, eine verlustbehaftete Übersetzung ohne Warnung. Außerdem sind echte Sprachen mehrdeutig, aber Python-Casting ist deterministisch: int("42") ergibt immer exakt 42.

Die input()-Falle: Schritt für Schritt

1
eingabe = input("Dein Alter: ") — Nutzer tippt 25 ein
2
type(eingabe) ist <class 'str'> — es ist Text, keine Zahl!
3
eingabe + 5 — TypeError! String und Integer nicht mischbar
4
alter = int(eingabe) — jetzt ist es ein Integer, alter + 5 ergibt 30

Casting in Aktion

eingabe = input("Dein Alter: ")    # Nutzer tippt 25
print(type(eingabe))               # <class 'str'>

alter = int(eingabe)               # jetzt ein Integer
print(alter + 5)                   # 30
print("Du bist " + str(alter) + " Jahre alt.")

Zuerst mit int() in eine Zahl umwandeln, dann rechnen. Für die Textausgabe mit str() zurück in einen String konvertieren.

ValueError: Ungültige Konvertierung

Nicht jeder String lässt sich in eine Zahl umwandeln. Wenn der Inhalt kein gültiges Zahlenformat hat, wirft Python einen ValueError.

int("hallo")    # ValueError: ungültiges Literal
float("drei")    # ValueError: ungültiges Format
int(3.99)        # 3 (Abschneiden, kein Runden!)

Implizite vs. explizite Konvertierung

Innerhalb der numerischen Typen konvertiert Python automatisch: Bei 5 + 3.0 wird die 5 intern zu 5.0, das Ergebnis ist 8.0 (float). Aber zwischen Text und Zahlen konvertiert Python nie automatisch.

5 + 3.0       # 8.0 (int wird zu float, automatisch)
"5" + 3       # TypeError! (keine automatische Konvertierung)

Vorsicht: bool("0") ist True

Bei bool() gelten besondere Regeln: Leere Werte (leerer String "", Zahl 0, None) werden zu False, fast alles andere zu True. Das bedeutet: bool("0") ergibt True, weil "0" ein nicht-leerer String ist, obwohl er optisch wie Null aussieht. bool() ist kein Ersatz für echte Validierung.

Ein gültiger Variablenname besteht aus Buchstaben, Ziffern und Unterstrichen, darf aber nicht mit einer Ziffer beginnen. Groß- und Kleinschreibung zählt: alter und Alter sind verschiedene Variablen. Reservierte Wörter wie if, for, while, True, False und None können nicht als Variablennamen verwendet werden.

Die Python-Stilrichtlinie PEP 8 empfiehlt snake_case für Variablen: kleingeschriebene Wörter mit Unterstrichen, zum Beispiel max_punkte oder nutzer_name.

Ein häufiger Fehler: Eingebaute Funktionen als Variablennamen verwenden. Schreibst du print = 5, überschreibst du die print()-Funktion im aktuellen Namensraum und kannst sie nicht mehr aufrufen.

In statisch typisierten Sprachen wie C oder Java deklarierst du den Typ: int alter = 25; Der Name ist fest an einen Typ gebunden. In Python gehört der Typ zum Objekt, nicht zum Namen: x = 10 und danach x = "hallo" ist gültig, weil x einfach auf ein neues Objekt zeigt.

Das macht Python flexibler, bedeutet aber auch, dass kein Compiler Typfehler vor der Laufzeit fängt. Wenn eine Operation unerwartet fehlschlägt, ist type() dein erstes Werkzeug: Prüfe, ob die Variable den Typ hat, den du erwartest.

Das Wichtigste auf einen Blick

  1. Eine Variable in Python ist ein Name, der auf ein Objekt im Speicher zeigt. Sie ist ein Etikett, kein Behälter. Neuzuweisung lässt den Namen auf ein neues Objekt zeigen.
  2. Jedes Objekt hat einen Typ: str für Text, int für ganze Zahlen, float für Dezimalzahlen, bool für True/False. Der Typ bestimmt, welche Operationen erlaubt sind.
  3. Python weigert sich zu raten, wenn du inkompatible Typen mischst: "5" + 3 löst einen TypeError aus. Du musst explizit konvertieren mit int(), float(), str() oder bool().
  4. Die Funktion input() gibt immer einen String zurück. Um mit Nutzereingaben zu rechnen, musst du zuerst umwandeln: int(input("Alter: ")).
  5. Verwende type(x), um den Typ eines Werts zu prüfen. Es ist deine Debugging-Taschenlampe, wenn Operationen unerwartet fehlschlagen.

Quiz: Teste dein Wissen

Frage 1 / 4
Noch offen

Was bedeutet der Unterschied zwischen = und == in Python?

Wählen Sie eine Antwort
Auflösung: 1) B · 2) B · 3) C · 4) B

Checkpoint: Hast du alles verstanden?

  • Was passiert genau, wenn du zuerst x = 10 und danach x = 20 schreibst? In welchem Sinn existiert der Wert 10 danach noch?
  • Warum führt print("Alter: " + 25) zu einem Fehler, und wie lässt sich der Code reparieren, damit er die gleiche Ausgabe fehlerfrei erzeugt?
  • Warum gibt input() immer einen String zurück, und welche zwei Schritte brauchst du, um mit der Eingabe eine Berechnung durchzuführen?