파이썬 call by value vs call by reference
파이썬 call by value vs call by reference — #파이썬callbyvalue #파이썬callbyreference AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성...
#파이썬callbyvalue #파이썬callbyreference
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
파이썬 매개변수
파이썬자습서 4장 함수의 심화내용입니다. 특히 이번장은 매개변수(parameter)에 대한 내용을 담고 있습니다. 매개변수가 함수에 어떤 방법으로 들어가는지(호출되는지)에 대한 두가지 방법을 소개합니다.
call by value
복사본
call by value, 값에 의한 호출입니다. 매개변수가 가지고 있는 값을 그대로 복사해서 들어갑니다. 특징은 값만 복사된거라 데이터가 함수내부에서 변해도 원본 데이터의 값이 변하지 않습니다.
| def func(s): s += 'Nice to meet you' return smsg = 'Hello, 'result = func(msg)print(result)print(msg) |
|---|
| 'Hello, Nicr to meet you''Hello, ' |
|---|
위의 코드 결과를보면, msg가 func의 매개변수로(parameter)로 들어간 후 값을 리턴받아서, result의 결과가 바뀌었습니다.
하지만 파이썬에서 문자열을 불변이라, call by value 형식으로 변수가 들어가고, 원래 가지고 있는 원본값은 변하지 않음을 알 수 있습니다. (마지막줄 print(msg) = 'Hello, '
call by reference
데이터의 참조
참조에 의한 호출, call by reference를 이해하기 위해서는 참조에 대한 의미를 이해할 필요가 있습니다. 이번글에서는 간략하게 설명하고 나중에 심볼에 대한 내용을 설명하면서 좀 더 구체적으로 이야기 하겠습니다.
참조란 데이터를 가리키는 것을 의미합니다. 예를 들어 a = 10이라는 변수를 만들었다고 가정합시다. 파이썬은 여기서 a라는 변수가 10을 직접 가지는게 아니라, 10을 가리키고 있음으로 해석합니다.
만약 참조를 변경하면 어떻게 될까요? a가 10을 가리키다가 11을 가리킨다고 가정합시다. a는 실제 값을 가지고 있지는 않아도, 이전과 다른 11을 가리키고 있으니 a의 값은 변했다(?)고 볼 수 있습니다.
그렇습니다 참조에 의한 호출(call by reference)은 함수에 의해 원본데이터가 변합니다.
| def func(s): s.append('appleMango') return sfruits = \['apple', 'banana', 'mango'\]myFavor = func(fruits)print(myFavor)print(fruits) |
|---|
| \['apple', 'banana', 'mango', 'appleMango'\]\['apple', 'banana', 'mango', 'appleMango'\] |
|---|
list는 파이썬에서 가변데이터입니다. list가 매개변수(parameter)로 들어가게되면, 함수는 call by reference형식을 사용하여 list값 자체를 바꿔버립니다.
함수에서는 끝 글자에 'appleMango'를 추가시켰습니다. 함수를 다돌고 나서 이후 원본데이터인 fruits를 print( ) 했더니 원본 데이터와는 다르게 변한걸 볼 수 있습니다.
파이썬은 call by value? call by reference?
파이썬은 데이터 종류에 따라
파이썬은 call by value일까요, call by reference일까요?
사실 위 예제를 설명 후 이런 질문을 하는건 어리석은 행동입니다. 이미 두 예제를 통해서 파이썬은 데이터에 따라 call형식이 변하는passed by assignment이기 때문입니다.
불변 객체를 넣게되면, call by value형식을, 가변 객체를 넣게되면, call by reference 형식을 사용합니다.
핵심내용 두줄 요약
- 파이썬에서 call by value는 데이터가 불변일때, 원본이 바뀌지 않는다.
- 파이썬에서 call by reference는 데이터가 가변일때, 원본이 바뀐다.



