Python 可変性オブジェクトの引数は、関数に渡すと呼び出し側も変わってしまう

私は一番慣れている言語がJava, PHPなので、Pythonのこの流儀になれずによく間違ってしまうので、書いておきます。

def changer(x,y):
    x = 2
    y[0] = ["hogehoge"]

x = 0
L = ["hage", "moke"]

changer(x , L)

print(x) # 0 が出力されます
print(L) # [['hogehoge'], 'moke'] が出力されます

 

xは整数で不変性オブジェクトなので上書きされません。Lはリストで可変性オブジェクトなので変化があります。

ちなみに、下記のように丸ッとリストを変更してしまうと、呼び出し側が変更されませんので、気を付けましょう。

def changer(x,y):
    x = 2
    y = ["hogehoge", "ukiki"]

x = 0
L = ["hage", "moke"]

changer(x , L)
print(x) # 0 が出力されます
print(L) #['hage', 'moke']が出力されます

コメントを残す

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