Pythonでは、関数やメソッドに引数を渡す際の取り扱いについて理解することが重要です。特に、Pythonではすべての値はオブジェクトであり、変数にはオブジェクトのリファレンス(参照)が格納されています。
単純な値の代入
Pythonでは、関数内部で引数に別の値を再代入して、変数の参照先つまりリファレンスを変更した場合には呼び出し側に反映されません。例えば、次のようなコードを考えてみましょう。
def test1(arg):
arg += 10
num = 3
test1(num)
print(num) # numの値は変わらない
このコードでは、test1
関数の内部で引数arg
の値に10を加えていますが、関数を呼び出した後のnum
の値は変わりません。これは、arg
に再代入することにより、引数arg
の参照先が変更されてしまったからです。
リスト型も代入できます
次に、リスト型の変数を引数にして渡す場合を考えてみましょう。以下のようなコードを考えてみます。
def multi_values(x,y):
print(x)
print(y)
x = [1,2,3]
y = [4,5,6]
multi_values(x, y) # [1,2,3] [4,5,6] が出力される
このコードでは、multi_values
関数にリスト型の変数x
とy
を引数として渡しています。
しかし、関数の中でリストに新しい要素を追加する場合、注意が必要です。例えば、以下のようなコードを考えてみましょう。
def test2(arg):
arg = arg + [4, 5]
myLst = [1, 2, 3]
test2(myLst)
print(myLst) # myLstの値は変わらない
このコードでは、test2
関数の内部でリストarg
に新しい要素を追加していますが、関数を呼び出した後のmyLst
の値は変わりません。これは、新たなリストオブジェクトが生成され、そのリファレンスがarg
に再代入されたためです。
以上のように、Pythonでの変数と引数の扱いは、その変数の型によって異なる挙動を示します。これらの違いを理解することで、Pythonのコードをより効率的に書くことができます。