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