TIL

[Python] 함수의 인자 전달 시, 인자 값의 변경

BKM 2024. 11. 22. 16:22

Python을 사용해 함수를 만들어 실행시킬때, 어떤 경우에는 함수의 전달 인자로 사용된 값이 변하지 않고,

어떤 경우는 따로 return을 하지 않아도 전달 인자에 사용된 값이 변하는 경우가 있다.

 

C언어의 경우에는 전달 인자로 값 자체를 전달하는 Call-by-Value방식과 포인터 값을 전달하는 Call-by-Reference방식이 명확하게 구별되어있지만,

https://sdsf1225.tistory.com/118

 

C언어 - (12) : 포인터와 함수

함수에 대해 복습해보면, 함수를 선언할 때 'return type', 'function name', 'input(type)' 등의 요소가 필요했다.int Func(int num) // int : return type / Func : name / int num : input type, input{ 실행문 return res;}함수는 input

sdsf1225.tistory.com

 


Python의 경우에는 그런것이 따로 없기 때문에, 전달되는 인자의 type에 따라 전달 인자로 사용된 변수의 값이 변하는지 변하지 않는지가 결정된다.

 

이를 Call-by-Assginment라고 하며, 전달받는 인자가 immutable객체인 경우에는 값이 변하지 않고 mutable객체인 경우 값이 변화한다.

 

  • immutable
    • int, str, float, tuple ...
  • mutable
    • list, dict, set ...
# immutable
def immutable(value):
    value+=1
    print(value)
    
value = 2
immutable(value) # 3
print(value) # 2

따라서, 위의 함수의 경우에는 value로 int형태의 immutable객체를 전달하기 때문에 함수를 실행시켜도 원래 값이 변하지 않는

Call-by-Value방식으로 작동되며

# mutable
def mutable(value):
    value[0]+=1
    print(value[0])
    
value = [0,1]
mutable(value) # 1
print(value[0]) # 1

위의 경우는 mutable객체인 list가 전달되었기 때문에 값이 변하게된다.