기술적으로 이야기하자면 파이썬의 인수 전달 방식은 ‘값 전달(pass by value)’이 아니라 ‘참조 전달(pass by reference)’이지만, 정확하게 말하면 둘 다 아니다. 값이 파이썬 함수로 전달되면 해당 함수는 데이터 이름의 참조 주소를 받는다. 하지만 함수가 인수로 주어진 변수에 새로운 값을 대입하면 전달받았던 기존 값과 연결이 끊어지고 만다.
그렇게 되면 다음 함수는 전달받은 변수 값을 바꾸지 않기 때문에 원하는 대로 동작하지 않을 것이다.
def double_it(n):
n = n * 2
x = 10
double_it(x)
print(x) # x는 여전히 10이다!
처음 이 현상을 보면 제약 사항이라고 생각할 수 있다. 때로는 프로그래머가 여러 개의 ‘out’ 매개변수를 만들어야 할 필요가 있기 때문이다. 하지만 파이썬은 여러 값을 바로 반환하는 기능을 제공한다. 단 호출하는 함수의 반환값이 무엇인지 정확히 알아야 한다.
def set_values():
return 10, 20, 30
a, b, c = set_values()
앞 코드에서 변수 a, b, c는 각각 10, 20, 30으로 설정되었다.