자료구조 알고리즘/알고리즘

[TIL] Call by value와 Call by reference

Campkim 2021. 8. 22. 01:56

파이썬을 사용한 자료구조 및 알고리즘 공부중 가끔 부딪히는 문제가 있었다. reference 혹은  대부분 코드를 수정하여 해결하곤 했지만,  파이썬의 구동원리에 대한 이해를 높일 필요가 있을 것 같다. 오늘은 파이썬의 함수 호출방법에 대해 알아본다.

 

함수의 호출방식 두 가지

먼저 함수의 호출방법은 2가지가 있다.

  • Call by value (값에 의한 호출) - 기본적으로 C언어에서 지원하는 방식, 함수에서 값을 복사해서 전달하는 방식. 인자로 전달되는 변수를 함수의 매개변수에 복사함. 이렇게 복사되면 인자로 전달한 변수와는 별개의 변수가 되며, 매개변수를 변경해도 원래의 변수에는 영향을 미치지 않는다. 원본값에 영향이 없다는 의미이다. 값이 복사되기 때문에, 메모리를 차지한다. 많은 계산이 들어가면 과부하의 원인이됨.
    장점 : 원본 값이 보존된다. 복사하여 처리하기 때문에 안정성이 있다.
    단점 : 복사를 하기 때문에 메모리 사용량이 늘어난다.
  • Call by reference (참조에 의한 호출) - 값을 복사해서 전달하는 방식이 아니다. 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. 
    장점 : 복사하지 않고 직접 참조하기 때문에 빠르다.
    단점 : 직접 참조를 하기에 원래 값이 영향을 받는다. (리스크)

 

파이썬은 Call by assignment

파이썬의 경우, 넘겨지는 객체의 종류에 따라서 Call by value, Call by reference로 나뉘어 진다.

  • Call by value에 해당되는 값은 immutable Object int, str, float, tuple 등 단일 값이거나 static 속성을 가지는 객체이다.
  • Call by reference에 해당되는 값은 mutable Object list, dict, set이 있다.

 

 

 출처 : 친구가 슬랙으로 보내줌..