一般に引数を使って関数に値を渡す場合、「値渡し」と「参照渡し」の2種類がある。
値渡しはコピーした値を渡す一方、参照渡しは格納されている場所を渡す。
Pythonでは後者の参照渡しが使われる。(プログラム言語ごとに違うので注意)
引数にイミュータブルなオブジェクトを指定した場合
タプル、文字列、数値など
def func(n): print(id(n)) x = 10 print(id(x)) >> 1407... func(x) >> 1407...
イミュータブルなオブジェクトが引数に渡された場合でも参照渡しが行われるが、変更が加わる場合、ほかの番地にコピーが作られる。
def func(n): print(n) print(id(n)) n += 3 print(n) print(id(n)) x = 10 print(x) # >>10 func(x) # >>10 # >>11531200 # >>13 # >>11531296 print(x) # >>10
ミュータブルなオブジェクトの場合
リスト、辞書など
def func(n): n[0] = 0 print(id(n)) print(n) x = [1, 1] print(x) print(id(x)) # >>[1, 1] # >>1399...936 func(x) # >>1399...936 # >>[0, 1] print(x) print(id(x)) # >>[0, 1] # >>1399...936
参考
JavaDrive Python入門