私は一番慣れている言語が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']が出力されます