pass-by-reference - python inspect 呼び出し元 - 変数を参照して渡すには?

python モジュール名 取得 / python / reference / parameter-passing

Pythonのドキュメントでは、パラメータが参照で渡されるのか値で渡されるのかが不明瞭なようで、以下のコードでは変更されていない値「Original」が生成されています。

class PassByReference:
    def __init__(self):
        self.variable = 'Original'
        self.change(self.variable)
        print(self.variable)

    def change(self, var):
        var = 'Changed'

Taryn



Answer #1

ミュータブルなオブジェクトを関数に渡す場合でも、これは適用されます。そして、オブジェクトに代入する場合と、関数内でオブジェクトを操作する場合の動作の違いの理由を明確に説明することができます。

def test(l):
    print "Received", l , id(l)
    l = [0, 0, 0]
    print "Changed to", l, id(l)  #新しいローカルオブジェクトが作成され、グローバルへのリンクが切断されましたl

l= [1,2,3]
print "Original", l, id(l)
test(l)
print "After", l, id(l)
Original [1, 2, 3] 4454645632
Received [1, 2, 3] 4454645632
Changed to [0, 0, 0] 4474591928
After [1, 2, 3] 4454645632