Ein Tupel ist eine Liste, die du nicht ändern kannst
Tupel und Listen sehen auf den ersten Blick ähnlich aus — beide sind geordnete Sequenzen, beide unterstützen Indizieren und Iterieren —, aber ein entscheidender Unterschied ändert alles: Tupel sind unveränderlich. Einmal erstellt, kannst du nichts hinzufügen, entfernen oder ersetzen.
Du schreibst Tupel mit runden Klammern (manchmal auch ohne):
Ein Tupel mit einem Element braucht ein nachgestelltes Komma, sonst behandelt Python die Klammern als Gruppierung:
Für leere Tupel nimmst du ():
Unveränderlichkeit in der Praxis
Versuchst du, ein Tupel zu ändern, stoppt Python dich:
Du kannst lesen — indizieren, slicen, iterieren, in — nur nicht verändern. Brauchst du ein anderes Tupel, erzeugst du ein neues.
Warum willst du etwas, das du nicht ändern kannst?
Unveränderlichkeit klingt nach Einschränkung, ist aber oft genau das Feature, das du willst.
- Sicherheit. Ein Tupel, das du an eine Funktion übergibst, kann dir nicht hinter dem Rücken verändert werden.
- Hashbarkeit. Tupel aus unveränderlichen Werten kannst du als Dict-Schlüssel oder Set-Elemente nutzen; Listen nicht.
- Absicht. Ein Tupel sagt „das ist ein fester Datensatz“.
point = (3, 4)kommuniziert „zwei Koordinaten“ klarer alspoint = [3, 4].
Tupel glänzen für Dinge wie:
- Koordinaten:
(x, y),(lat, lon) - RGB-Farben:
(255, 128, 0) - Datensätze:
(name, email, signup_date) - Mehrere Werte aus einer Funktion zurückgeben
Unpacking
Tupel und die Unpacking-Syntax sind füreinander gemacht:
Das Komma auf der linken Seite erledigt das Entpacken. Python sieht zwei Namen und ein Tupel mit zwei Werten und bindet sie paarweise.
Das taucht in idiomatischem Python überall auf:
Mit * sammelst du „den Rest“:
Praktisch, wenn dich nur das erste und letzte Element interessieren.
Tupel als Dictionary-Schlüssel
Weil Tupel hashbar sind (solange ihr Inhalt es ist), kannst du sie als Dict-Schlüssel nutzen. Listen können das nicht:
Dieses Muster — schlüsseln nach einer Kombination von Werten — ist erstaunlich nützlich. Denk an: „der Score für Nutzer X an Tag Y“ oder „die beste Route von A nach B“.
Tupel für mehrere Rückgabewerte
Eine Funktion, die mehr als eine Sache zurückgeben muss, gibt meist ein Tupel zurück:
Pythons eigenes eingebautes divmod() macht genau das. Die Destrukturierungszuweisung beim Aufruf lässt es natürlich lesen.
Named Tuples, wenn die Position nicht reicht
Wachsen deine Tupel auf mehr als zwei oder drei Elemente, wird es mühsam, sich zu merken, welche Position was bedeutet. collections.namedtuple hilft:
Jetzt haben die Elemente Namen. Es bleibt unveränderlich, es bleibt ein Tupel (Unpacking und Indizieren funktionieren), aber der Zugriff ist viel freundlicher. Für Komplexeres gibt es dataclasses — die treffen wir später im Klassenkapitel.
Tupel vs. Liste: ein schneller Leitfaden
- Feste Form, jede Position hat Bedeutung → Tupel.
- Eine Sammlung, die wachsen oder schrumpfen könnte → Liste.
- Mehrere Werte aus einer Funktion zurückgeben → Tupel.
- Dict-Schlüssel oder Set-Element nötig → Tupel (Liste geht nicht).
- Du willst es verändern → Liste (Tupel lässt dich nicht).
Weiter
Tupel decken ein Ende des Spektrums ab: fest, klein, strukturiert. Als Nächstes: Sets, die einen ganz anderen Job abdecken — schnelles Mitgliedschaftsprüfen und Eindeutigkeit.
Häufig gestellte Fragen
Was ist ein Tupel in Python?
Ein Tupel ist eine geordnete, unveränderliche Sequenz — wie eine Liste, aber einmal erstellt kannst du keine Elemente hinzufügen, entfernen oder ändern. Du schreibst Tupel mit runden Klammern: point = (3, 4).
Was ist der Unterschied zwischen Tupel und Liste?
Beide sind geordnete Sequenzen. Listen sind veränderbar — du kannst sie nach dem Anlegen ändern —, Tupel sind unveränderlich. Tupel werden typischerweise für kleine Wertsammlungen genutzt, die als ein einziger „Datensatz“ zusammengehören, wie Koordinaten oder mehrere Rückgabewerte einer Funktion.
Wann sollte ich ein Tupel nutzen?
Nimm ein Tupel, wenn du einen festen Datensatz hast, in dem jede Position eine Bedeutung hat — Koordinaten, RGB-Farben, eine Datenbankzeile. Außerdem: nimm Tupel als Dictionary-Schlüssel oder Set-Elemente, da Listen dort nicht erlaubt sind. Für alles andere, wo die Sammlung wachsen oder schrumpfen könnte, sind Listen der Standard.