In Python ist es wichtig zu verstehen, wie Daten zwischen Funktionen und Variablen übergeben werden. Python verwendet sowohl By Value
als auch By Reference
Mechanismen, abhängig vom Datentyp. Das Verständnis dieser Konzepte hilft, den Programmfluss und das Verhalten von Variablen in verschiedenen Kontexten besser zu verstehen.
By Value
bedeutet, dass der Wert einer Variable kopiert wird, wenn er an eine Funktion übergeben wird. Änderungen am kopierten Wert haben keine Auswirkungen auf die ursprüngliche Variable. In Python gilt dieses Konzept hauptsächlich für unveränderliche (immutable) Datentypen.
Zu den unveränderlichen Datentypen in Python gehören:
5
)3.14
)'Hallo'
)(1, 2, 3)
)Wenn eine Variable mit einem dieser Typen an eine Funktion übergeben wird, wird eine Kopie des Wertes erstellt. Jede Änderung innerhalb der Funktion betrifft nur die Kopie, nicht die ursprüngliche Variable.
def modify_value(x): """ Tries to modify the immutable value by adding 10. """ x += 10 return x if name == 'main': a = 5 new_value = modify_value(a) print(f'Originaler Wert: {a}') # Output: Originaler Wert: 5 print(f'Neuer Wert: {new_value}') # Output: Neuer Wert: 15
Hier bleibt die ursprüngliche Variable a
unverändert, da int
ein unveränderlicher Typ ist. Die Änderung findet nur in der Kopie innerhalb der Funktion statt, und der ursprüngliche Wert bleibt erhalten.
By Reference
bedeutet, dass eine Referenz auf die Originaldaten übergeben wird, anstatt eine Kopie zu erstellen. Änderungen an diesen Daten innerhalb der Funktion beeinflussen somit die ursprüngliche Variable. In Python gilt dieses Konzept hauptsächlich für veränderbare (mutable) Datentypen.
Zu den veränderbaren Datentypen in Python gehören:
[1, 2, 3]
){'a': 1, 'b': 2}
){1, 2, 3}
)Wenn eine Variable mit einem dieser Typen an eine Funktion übergeben wird, wird eine Referenz auf das Originalobjekt übergeben. Jede Änderung innerhalb der Funktion wirkt sich direkt auf das ursprüngliche Objekt aus.
def modify_list(some_list): """ Appends the value 4 to the passed list. """ some_list.append(4) if name == 'main': my_list = [1, 2, 3] modify_list(my_list) print(f'Geänderte Liste: {my_list}') # Output: Geänderte Liste: [1, 2, 3, 4]
In diesem Beispiel wird die Liste my_list
direkt innerhalb der Funktion geändert. Da Listen in Python mutable sind, wird die Original-Liste durch die Änderung in der Funktion beeinflusst.
Die Art und Weise, wie Werte und Referenzen in Python übergeben werden, hat direkte Auswirkungen auf das Verhalten und die Vorhersagbarkeit des Codes:
Um ungewollte Seiteneffekte zu vermeiden, sollten Sie sich der Datenarten bewusst sein, die Sie in Funktionen verwenden, und überlegen, ob das Objekt unverändert bleiben soll oder nicht.
Das Verständnis von By Value
und By Reference
ist entscheidend für das Schreiben von klarem und wartbarem Code in Python. Immutable Objekte bieten Schutz vor unbeabsichtigten Änderungen, während mutable Objekte Flexibilität bieten, aber sorgfältig gehandhabt werden müssen, um unvorhergesehene Probleme zu vermeiden.
Tipp: Wenn Sie mutable Objekte verwenden, aber unerwartete Änderungen vermeiden möchten, sollten Sie in Erwägung ziehen, eine Kopie des Objekts zu erstellen, bevor Sie es an eine Funktion übergeben.