関数は(および意志アクセス)発呼者によって使用されるメモリ内の同じオブジェクトへの参照を受け取ります。
しかし、それは、呼び出し側がこのオブジェクト内に格納していることのボックスを受信しません。パスごとの値として、
この関数は、独自のボックスを提供し、自分自身のための新しい変数を作成します。
ボックス | オブジェクト | |
参照渡し | 同じボックス | 同じオブジェクト |
値渡し | 異なる箱 | 異なる値 |
渡しのオブジェクト | 異なる箱 | 同じオブジェクト |
dis.dis()バイトコード命令を印刷します。
リスト+ = [1,2] INPLACE_ADD
リスト=リスト+ [1,2] BINARY_ADD
Pythonはタイプを処理する方法与える +=
作成することによって、特別 __iadd__
ならびに方法 __add__
。
その意図は、変更可能なタイプは、のようなことである list
、で自分自身を変異させます __iadd__
(そして返す self
あなたは非常にトリッキーな何かをやっている場合を除き、)
によって参照:
1. https://stackoverflow.com/questions/15376509/when-is-ix-different-from-iix-in-python
2. https://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as-explained-by-philip-k-dick/