Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m323:learningunits:lu02:byvaluebyreference [2024/08/28 08:58] – [Beispiel 1: By Value mit Immutable Typen] kmaurizi | modul:m323:learningunits:lu02:byvaluebyreference [2026/08/25 09:00] (aktuell) – Interaktive Animation zum Speichermodell ergänzt admin | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | |||
| ====== LU02d - By Value und By Reference in Python ====== | ====== LU02d - By Value und By Reference in Python ====== | ||
| Zeile 5: | Zeile 4: | ||
| In Python ist es wichtig zu verstehen, wie Daten zwischen Funktionen und Variablen übergeben werden. Python verwendet sowohl '' | In Python ist es wichtig zu verstehen, wie Daten zwischen Funktionen und Variablen übergeben werden. Python verwendet sowohl '' | ||
| + | |||
| + | ===== Animation: Was im Speicher wirklich passiert ===== | ||
| + | |||
| + | Die folgende Animation zeigt Schritt für Schritt, was beim Aufruf einer Funktion im Arbeitsspeicher geschieht – einmal mit einer Zahl ('' | ||
| + | |||
| + | Klicken Sie sich mit **Weiter** durch beide Beispiele und vergleichen Sie insbesondere **Schritt 3**: Bis dorthin sind die beiden Abläufe identisch – erst dort trennen sich die Wege. | ||
| + | |||
| + | {{url> | ||
| ===== By Value ===== | ===== By Value ===== | ||
| Zeile 31: | Zeile 38: | ||
| return x | return x | ||
| | | ||
| - | if name == 'main': | + | |
| + | if __name__ | ||
| a = 5 | a = 5 | ||
| new_value = modify_value(a) | new_value = modify_value(a) | ||
| Zeile 38: | Zeile 46: | ||
| </ | </ | ||
| - | Hier bleibt die ursprüngliche Variable a unverändert, | + | Hier bleibt die ursprüngliche Variable |
| + | |||
| + | <WRAP center round info 90%> | ||
| + | **Genauer betrachtet: | ||
| + | </ | ||
| ===== By Reference ===== | ===== By Reference ===== | ||
| Zeile 48: | Zeile 60: | ||
| Zu den veränderbaren Datentypen in Python gehören: | Zu den veränderbaren Datentypen in Python gehören: | ||
| - | list (z.B. [1, 2, 3]) | + | * list (z.B. '' |
| - | dict (z.B. {' | + | |
| - | set (z.B. {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. | 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. | ||
| Zeile 61: | Zeile 74: | ||
| """ | """ | ||
| some_list.append(4) | some_list.append(4) | ||
| - | if name == 'main': | + | |
| - | my_list = [1, 2, 3] | + | |
| - | modify_list(my_list) | + | if __name__ |
| - | print(f' | + | my_list = [1, 2, 3] |
| + | modify_list(my_list) | ||
| + | print(f' | ||
| </ | </ | ||
| Zeile 73: | Zeile 88: | ||
| Die Art und Weise, wie Werte und Referenzen in Python übergeben werden, hat direkte Auswirkungen auf das Verhalten und die Vorhersagbarkeit des Codes: | Die Art und Weise, wie Werte und Referenzen in Python übergeben werden, hat direkte Auswirkungen auf das Verhalten und die Vorhersagbarkeit des Codes: | ||
| - | Immutable Objekte: Änderungen in einer Funktion betreffen nur die lokale Kopie. Der Originalwert bleibt unverändert. | + | * **Immutable Objekte:** Änderungen in einer Funktion betreffen nur die lokale Kopie. Der Originalwert bleibt unverändert. |
| - | Mutable Objekte: Änderungen in einer Funktion betreffen direkt das Originalobjekt. Dies kann zu unbeabsichtigten Seiteneffekten führen, wenn die Funktion den Zustand des Objekts verändert. | + | * **Mutable Objekte:** Änderungen in einer Funktion betreffen direkt das Originalobjekt. Dies kann zu unbeabsichtigten Seiteneffekten führen, wenn die Funktion den Zustand des Objekts verändert. |
| 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. | 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. | ||
| Zeile 84: | Zeile 99: | ||
| 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. | 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. | ||
| </ | </ | ||
| + | |||
| + | ---- | ||
| + | {{tag> | ||
| + | [[https:// | ||
| + | |||