Seite 1 von 1

Verfasst: Freitag 6. März 2009, 11:56
von BlackJack
Jetzt geht das wieder los. :-)

Python macht kein "call by reference", sondern "call by object" oder "call by sharing".

Die Unterscheidung "call by reference" vs. "call by value" macht nur Sinn bei Sprachen, die auch Zeigerdatentypen haben.

Verfasst: Freitag 6. März 2009, 12:27
von jerch
@BlackJack
Ja, recht haste. Für mich als von c++ kommend, fühlt sich das Verhalten am ehensten wie Referenzschieberei an. Zeiger brauchst hierfür nicht, da der Bezeichner ja keine eigene Speicherrepräsentation haben muß (also in der Sprache). Und für Leute von anderen Sprachen herkommend, ist call by object erstmal unverständlich.

Aber ich wollt hier nicht ne alte Kamelle von Neuem lostreten.

Noch eine Ergänzung hierzu:
Um die Sache völlig zu verkomplizieren, muß man in die Python-Eingeweide abtauchen und hier macht Python call-by-value. :shock:
Vereinfacht gesagt passiert hier folgendes. Python sucht zum gegeben Bezeichner die PyObject-id und übergibt diese dann via call-by-value. Da diese aber als Referenz zum eigentlichen PyObject fungiert, nennt sich der Spaß dann call-by-object-reference (und für mich ist das nur ein Spezialfall von call-by-reference). Der wesentliche Unterschied zu z.B. c/c++ ist hier die zusätzliche Abstraktionsschicht zwischen Bezeichner und eigentlichem Objekt in Form von Referenzen (eigentlich Pointer, aber egal). Phänomenologisch wirkt sich nun der immutable/mutable-Unterschied auf Programmlogikebene aus, da sich die einen eher wie call-by-value und die anderen wie call-by-reference verhalten. Daher wohl der Versuch, das Ganze neu zu benennen.