Am 12.11.2013 um 14:51 schrieb Alexander Langer:
Ich würde sagen die Objekte unterscheiden sich in ihrem Verhalten.
Natürlich. Nur hat das nichts mit der Art der Übergabe zu tun. Es gibt mutable und immutable Objekte. Diese unterscheiden sich genau bzgl. dieser Eigenschaft. Da das auch an anderer Stelle wichtig ist, steht das in der Standardbibliothek quasi an jedem Objekte dran. Von Überraschungen kann in meinen Augen also eigentlich keine Rede sein.
Und ja, das halte ich für ein Problem weil es unerwünschte Seiteneffekte produziert.
Welche denn z.B.? Python zeichnet sich gegenüber anderen Sprachen eigentlich dadurch aus, daß es extrem konsistent und "überraschungslos" ist. Bezogen auf die Parameterübergabe: So lange du einen übergebenen Wert in eine Funktion nicht änderst, ist's eh alles ok. Wenn du ihn ändern willst, mußt du wissen, ob er mutable ist oder nicht. Wenn ja, kannst du ihn ändern. Wenn nicht nicht. Das war's eigentlich.
Solange man ein Bewusstsein für schafft, ist es ok.
Die Unterscheidung von mutable und immutable ist in der Pythonwelt in meinen Augen ständig präsent. Von daher ist's für mich schwer nachzuvollziehen, wie man da kein Bewußtsein dafür haben kann. Persönlich hallte ich diese call-by-xyz Diskussion für eine typisch akademische Haarspalterei, die zu C-Zeiten mal Sinn gemacht hat. Aber wer C programmieren will, soll doch bitte C programmieren. In Python geht es um Objekte und Variablen sind Referenzen auf diese Objekte. Was an eine Funktion übergeben wird, ist die Referenz. Ich kann jetzt also sagen, daß das Objekt "by reference" übergeben wird, oder aber die Referenz "by value". Nur bringt das niemandem neue Erkenntnisse. Vielleicht hilft übrigen http://pythontutor.com/ zu verstehen, wie Python funktioniert. Grüße, Achim