
Variablen tauschen in Python und Java
Die Werte zweier Variablen sollen vertauscht werden. Eine alltägliche Anforderung die es in sich hat. Ein Rezept funktioniert in jeder Programmiersprache. Doch Python bietet eine besonders einfache Möglichkeit.
Werte von Variablen vertauschen mit Java
Dies ist ein häufig gesehener Anfängerfehler:
/* Variablen definieren und initialisieren */ int a = 47; int b = 11; /* Variablen tauschen */ a = b; b = a; /* Variablen ausgeben */ System.out.println("a="+a+" b="+b);
Das Ergebnis der Bemühung sieht so aus:
a=11 b=11
Die Erklärung ist mehrstufig:
Das Gleichheitszeichen
Das Gleichheitszeichen ist nicht die mathematsiche Gleichheit sondern der Zuweisungsoperator: Der Wert der Variablen links vom Zuweisungsoperator wird mit dem Wert der Variablen rechts vom Zuweisungsoperator überschrieben. Der alte Wert geht dabei verloren.
Also:
- Der Befehl
a = b
bewirkt, dass der Wert von b, also 11 in die Variable a kopiert wird. Die Variable a hat danach den Wert 11. - Der nachfolgende Befehl
b = a
bewirkt, dass der Wert von a, der jetzt ja 11 beträgt, in die Variable b kopiert wird.
So entsteht das Ergebnis.
Die Abhilfe ist einfach – eine Hilfsvariable:
int hilfsvariable = a; a = b; b = hilfsvariable;
Was passiert:
- Mit
int c = a
wird eine neue Variable mit der Bezeichnung c definiert und mit dem Wert der Variablen a initialisiert. hilfsvariable hat also den Wert 47; a = b
kopiert den Wert der Variablen b in die Variable a. a hat also den Wert 11.b = c
kopiert jetzt den Wert der Variable hilfsvariable in die Variable a und diese nimmt damit wie erwartet den Wert 47 an.
Fertig. Das Rezept funktioniet in jeder Programmiersprache – auch in Python.
Variablen tauschen in Python – einfache Variante
Python ist keine typsichere Sprache, wir brauchen also den Datentyp einer Variablen nicht zu definieren. Der Python-Interpreter findet diesen für uns heraus. Der Java Code aus unserem Beispiel sieht in Python so aus:
a = 47 b = 11 c = a a = b b = c print(f'a={a} b={b}')
Probier gleich aus auf dem Python Playground.
Variablen tauschen in Python – fortgeschrittene Variante
Python bietet viel Magie – auch für das Tauschen von Variablenwerten. Statt drei Zeilen reicht eine Zeile: (b, a) = (a, b)
. Sehr intuitiv, nicht wahr.
a = 47 b = 11 (b, a) = (a, b) print(f'a={a} b={b}')
Probier gleich aus auf dem Python Playground.
Doch was steckt dahinter? Viele Konzepte laufen zusammen, um diese einfach Möglichkeit anzubieten.
Pointer
Eine Variable in Python bedeutet eigentlich nur einen Verweis auf eine Stelle im Memory. Also eine Adresse. Der Python-Interpreter den Variablen während der Programmausführung die jeweiligen Adressen zu. Das ist auch in anderen Programmiersprachen so. Der Artikel Primitive Datentypen vergleicht Java und Python im Hinblick auf die Art und Weise, wie Variablen gespeichert werden.
Der Fachbegriff für Verweis ist Pointer (oder Zeiger). Und ein Pointer ist eigentlich eine Adresse im RAM. Die Speicherstellen im RAM sind ja durchnummeriert und die Nummer dient als Adresse. Das können wir uns vorstellen, wie auf diesem Bild:
a
bedeutet also eigentlich eine Adresse, also ein Zeiger ins RAM (Random Access Memory). Ohne sich darum zu kümmern, verwenden Python-Programmierer ständig Pointers.
In anderen Sprachen, beispielsweise C, sorgt man sich beim Programmieren ständig um Pointers.
Tupel
In Python ist (a, b)
ein Tupel – also ein eigener Datentyp. Eigentlich müsste man sagen, ein Objekt des Typs Tupel. Doch das ist zu umständlich.
Tupel sind eingebaute Datentypen – und so können wir sie auch ohne speziellen Aufruf eines Konstruktors verwenden – also einfach (a, b)
schreiben und damit ist das Tupel gebildet. Und auch ein Tupel ist als Objekt eigentlich nur ein Pointer.
Zuweisungszeichen
Das Gleichheitszeichen ist in Python – und nicht nur dort – der Zuweisungsoperator:
Der Wert des Ausdrucks rechts vom Zuweisungszeichen, wird der Variablen links vom Zusweisungszeichen zugeordnet.
Eigentlich werden nur Pointers umgehängt – Das Bild zeigt die folgenden Befehle:
a = 47 c = a
Und das auf die Spitze getrieben münde bei Python in den Code (b, a) = (a, b)
.
Was der Code bewirkt, sehen wir im Python Playground:
Die Werte der Variablen a
und b
werden also vertauscht.
So elegant geht das und so viel steckt dahinter.
Der Aufwand der Python-Magie
Eine Extra-Variable c
einfügen erscheint auf den ersten Blick umständlich und Python erscheint viel sparsamer.
Doch der Schein trügt: In Python haben wir sogar zwei Extra-Objekte: nämlich das Tupel (a, b)
und das Tupel (b, a)
.
So gesehen ist Python für die Anwender sparsam, doch die Python-Magie kostet im Hintergrund ganz schön viel Platz und auch viel Ausführungszeit.
Zeit ist Geld – das ist nichts Neues. Als Programmiererinnen und Programmierer konzentrieren wir uns gerne auf die unmittelbaren Fragestellungen und da ist Python natürlich attraktiv.
Python-Magie und Datentypen
Python ist eine enorm flexible Sprache. Tupel sind nur einer der Python Datentypen. Hol dir unser praktisches Cheat Sheet mit allen eingebauten Python Datentypen.: