파이썬의 참조방식 call by object reference

1. call by value

 

함수에 인자 값을 전달해도 호출자에게 영향을 주지 않음

 

a=5로 f(x)에서 x인자에 5를 전달을 하면 함수 내에서 x=5인데

 

x=7 수행문에 의해 변경시켜도 함수 밖 a 변수가 가지는 값은 여전히 5

 

etc-image-0

 

 

 

etc-image-1

 

 

2. call by reference

 

함수 내 인자 값 변경시 호출자 값에도 영향을 줌

 

값을 주면서 메모리 주소를 넘겨주는 형태

 

a=5로 함수 f의 x에 넘길 때 메모리 주소도 같이 넘겨서 함수 내부에서 x=7로 변경시키면 함수 밖 a값도 7로 바뀜

 

etc-image-2

 

 

 

etc-image-3

 

 

3. call by object reference

 

파이썬의 방식

 

call by value와 call by reference를 혼합해서 사용

 

객체의 주소가 함수로 전달되는 방식

 

전달된 객체를 참조하여 변경시에는 호출자에게 영향을 주나 재할당해버리면 호출자에게 더 이상 영향을 주지 않음

 

파이썬의 immutable object(단순한 변수, 문자열, tuple)는 call by value를 따르고

 

mutable object(list, dict 등)는 call by reference를 따른다.

 

etc-image-4
파이썬의 참조방식을 표현한 그림

 

 

ham = [0]에서 spam(eggs)에 전달하면 eggs와 ham이 모두 [0]을 가리키는데..

 

여기에 1을 append하면 eggs, ham 모두 [0,1]이고..

 

여기서 eggs = [2,3]으로 재할당해버리면 eggs는 [2,3]을 가리키고, ham은 [0,1]을 가리킨다

 

728x90