Am 12.11.2013 09:58, schrieb Stefan Schwarzer:
Im zweiten Fall wird durch die Slice-Zuweisung das übergebene Listen-Objekt selbst ("in-place") verändert, so dass diese Änderungen auch nach Verlassen der Funktion sichtbar sind. Anstelle der Slice-Zuweisung könnte jede andere Anweisung stehen, die die Liste verändert, zum Beispiel `list_.append(1)` oder `list_.pop()`.
Ja, das habe ich schon verstanden nur ist folgendes nicht "call-by-value" like: def unchanged(list_): list2_ = list_ list2_.pop(0) L = [1, 2, 3] unchanged(L) print L Es geht um die Semantik. Ich halte die Aussage, das sei call-by-value schlicht für falsch. Man kann sich darauf einigen, dass Python es anders macht und es meinteswegen call-by-assign nennen. Ungewohnt ist es trotzdem.
Wie gesagt, es gibt _keine_ unterschiedliche Parameter-Übergabe für veränderliche und unveränderliche Objekte. Entscheidend ist, was du mit den Objekten innerhalb deiner Funktion/Methode machst.
Ich würde sagen die Objekte unterscheiden sich in ihrem Verhalten. Und ja, das halte ich für ein Problem weil es unerwünschte Seiteneffekte produziert. Solange man ein Bewusstsein für schafft, ist es ok.