Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m323:learningunits:lu02:byvaluebyreference [2024/08/28 09:00] – [Unterschiede und Auswirkungen] kmaurizimodul: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 ''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. 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.
 +
 +===== 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 (''int'') und einmal mit einer Liste (''list''). Links sehen Sie die **Namen** (Variablen), rechts die **Objekte**; ein Pfeil bedeutet «dieser Name zeigt auf dieses Objekt».
 +
 +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>https://templates-python.github.io/m323_html/lu02/byvalue-byreference.html 100%,780px noborder|Animation: By Value und By Reference}}
  
 ===== By Value ===== ===== By Value =====
Zeile 32: Zeile 39:
          
          
-if name == 'main':+if __name__ == '__main__':
     a = 5     a = 5
     new_value = modify_value(a)     new_value = modify_value(a)
Zeile 40: Zeile 47:
  
 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. 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.
 +
 +<WRAP center round info 90%>
 +**Genauer betrachtet:** Streng genommen kopiert Python auch hier nichts – auch der ''int'' wird als Referenz übergeben (siehe Schritt 2 der Animation). Weil ''int'' aber //immutable// ist, kann ''x += 10'' das Objekt gar nicht verändern und erzeugt stattdessen ein neues. Das Ergebnis sieht deshalb aus wie ''By Value''.
 +</WRAP>
  
 ===== By Reference ===== ===== By Reference =====
Zeile 65: Zeile 76:
          
          
-if name == 'main':+if __name__ == '__main__':
     my_list = [1, 2, 3]     my_list = [1, 2, 3]
     modify_list(my_list)     modify_list(my_list)
Zeile 88: 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.
 </WRAP> </WRAP>
 +
 +----
 +{{tag>M323-LU02 M323-A1I}}
 +[[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi 
 +
  • modul/m323/learningunits/lu02/byvaluebyreference.1724828409.txt.gz
  • Zuletzt geändert: 2024/08/28 09:00
  • von kmaurizi