Call by Refrence 와 Call by Value

원래 언어라면 잘 분리되어 있는 경우가 많다. 그러나 파이썬은 예외스럽다.

함수의 인자 전달 방식에 대한 분류이다.

Call by value

값에 의한 참조, 변수를 복사한 값을 전달하는 방식

함수의 인자를 받을때 변수에 담긴 값 자체를 stack에다가 복사하여 넘겨준다.

def(a) 전달받은 a는 a 자체가(주소 값)가 아니라 a의 복사값 이 들어간다.

즉 원본을 건드리지 않으면 원본 변수는 바뀌지 않는다.

Call by reference

인자로 받은 변수의 주소 값을 전달하는 방식

함수 인자 받을때 변수가 가리키는 주소 값을 전달한다.

그러나 파이썬에서는

Call by assignment이다.

파이썬은 모든 것을 객체로 판단하며,

파이썬에서는 global인지 local인지 영역에 따라서 변수들 정보를 저장하는 namespace가 따로있다

따라서 immutable 한 포맷의 객체(tuple 등)은 변경할 수 없지만,

mutable한 포맷의 객체(list, dic, 직접 만든 클래스 등)은 변경할 수 있다.