\

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関数にリスト型の変数xyを引数として渡しています。

しかし、関数の中でリストに新しい要素を追加する場合、注意が必要です。例えば、以下のようなコードを考えてみましょう。

def test2(arg):
    arg = arg + [4, 5]

myLst = [1, 2, 3]
test2(myLst)
print(myLst)  # myLstの値は変わらない

このコードでは、test2関数の内部でリストargに新しい要素を追加していますが、関数を呼び出した後のmyLstの値は変わりません。これは、新たなリストオブジェクトが生成され、そのリファレンスがargに再代入されたためです。

以上のように、Pythonでの変数と引数の扱いは、その変数の型によって異なる挙動を示します。これらの違いを理解することで、Pythonのコードをより効率的に書くことができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です