t2018112072   2년 전

안녕하세요.. 코린이 탈출하고 싶은 마음에 하나하나 배워가는 대학생입니다 ㅠㅠ

지금 종만북 이라는 책을 이용해서 알고리즘을 공부하는 중입니다. 물론 c++로 구현된 예제 코드들이지만, 파이썬으로 옮겨서 구현하고 싶은 마음에 예제를 python으로 복습하는 중입니다.

제가 알기론 C++에서 벡터를 함수로 전달할때, 기본적으로는 call by value이고 역참조 연산자&를 함수 선언시 명시해야 call by reference라고 알고 있습니다. python에서는, 검색해보니 배열은 call by reference 형태로 전달된다고 하더군요..

그래서 제가 궁금한것은,

python의 배열을 함수의 인자로 넘기는것과 vs C++에서 vector를 call by reference로 함수에 넘기는것의 차이가 있을까요??

바보같은 질문일수도 있지만 c++의 코드중 vector만 python의 list로 바꾸어 구현하니 오류가 생기는 경우가 있어 질문드립니다..!

aru0504   2년 전

Python에서는 Call by Object Reference 방식으로 함수인자를 전달해요.

Object가 mutable(변형 가능 - list 등)한지, immutable(변형 불가능 - int, float, string, tuple 등)한지에 대해서 다른 방식으로 작동합니다.

list의 경우 mutable object이기 때문에 함수인자로 넘기게 되면 값이 변하게 돼요. immutable object를 넘기는 경우에는 함수 내에서 변형이 이뤄지면 서로 다른 주소를 가리키게 됩니다. 

t2018112072   2년 전

좋은 답변 감사합니다!! 덕분에 개념이 확립되었네요. c로 자료구조를 배웠다 보니 헷갈린 부분이 있었네요. 

c++에서 함수의 인자를 역참조해서 전달하는 방법과 python의 배열 전달과 비슷하게 작동된다는 것 잘 알아갑니다~

aru0504   2년 전

간단한 예제입니다. immutable object는 같은 object을 가리키고 있다가 적용하는 순간 다른 object를 가리키게 돼 함수 밖에서는 영향을 미치지 않습니다. (return을 통해 받아야 합니다)

반면에 mutable object는 적용해도 같은 id를 가리키고 있기 때문에, 함수 밖에서도 영향을 미칩니다.

(아래 예시의 id는 실행환경에 따라 다를 수 있어요)

댓글을 작성하려면 로그인해야 합니다.