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

1. call by value

 

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

 

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

 

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

 

 

 

 

 

 

2. call by reference

 

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

 

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

 

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

 

 

 

 

 

 

3. call by object reference

 

파이썬의 방식

 

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

 

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

 

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

 

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

 

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

 

파이썬의 참조방식을 표현한 그림

 

 

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

 

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

 

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

 

TAGS.

Comments