Pythonの引数渡しと値渡しはどう違うのか

Pythonでは、関数の引数の渡し方には値渡しと参照渡しの2種類があります。

  1. 値渡し(オブジェクトのコピーを渡す):不変オブジェクト(数値、文字列、タプルなど)を関数に渡した場合、オブジェクトのコピーが作成され、そのコピーが関数に渡される。関数内で引数を変更しても、もとのオブジェクトには影響しない。

サンプルコード:

def change_value(x):
    x = 10
    
num = 5
change_value(num)
print(num)  # 输出 5

上記のコードにおいて、変数numがchange_value関数に渡されます。関数内部では、引数xの値は10に変更されますが、元のオブジェクトであるnumには影響しません。

  1. 関数に可変なオブジェクト(list、dict、set など)を渡すと、オブジェクトの参照(ポインター)が渡されます。関数内で引数に対して変更を加えると、元のオブジェクトにも反映されます。

サンプルコード:

def change_list(lst):
    lst.append(4)
    
my_list = [1, 2, 3]
change_list(my_list)
print(my_list)  # 输出 [1, 2, 3, 4]

上記コードでは、リストmy_listをchange_list関数に渡しています。関数内部で、引数のlstが参照するリストにappendメソッドで要素4を追加しているため、元のリストも変更されてしまいます。

まとめ

  1. 不変オブジェクトでは、値渡しによってコピーを生成し、関数の内部での変更は元のオブジェクトに影響を与えない。
  2. 参照渡しでは、オブジェクトの参照が直接渡されるので、関数の内部でオブジェクトを変更すると、元のオブジェクトにも反映されます。
bannerAds