C 하다가 넘어왔는데 파이썬 함수 인자 전달 방식이 도무지 감이 안 잡힙니다. 리스트를 넘겼더니 원본이 바뀌어서 참조 전달인가 했는데, 또 다른 경우엔 안 바뀌어서 혼란스러워요.


def modify(l):
    l.append(4)

def rebind(l):
    l = [9, 9]

def inc(x):
    x += 1

a = [1, 2, 3]
modify(a)
print(a)  # [1, 2, 3, 4]

b = [1, 2, 3]
rebind(b)
print(b)  # [1, 2, 3]

n = 5
inc(n)
print(n)  # 5


같은 리스트인데 append 하면 원본이 바뀌고, 안에서 l = [9, 9] 로 다시 대입하면 원본은 그대로예요. int는 아예 안 바뀌고요. 이 세 개 결과가 왜 다르게 나오는지 하나로 설명해주실 분 계실까요?