파이썬에서 함수로 인자를 전달하는 방식에는 두 가지가 있다.
- 값으로 호출하기: 값으로 호출하는 방식은 함수로 변수를 전달할 때 변수의 값이 복사되는 방식으로, 가장 많이 사용되는 방법이다.
- 참조로 호출하기: 참조로 호출하는 방식은 함수로 변수를 전달할 때 변수의 참조가 전달되는 방법으로, 함수에서 매개변수를 통해 원본 변수를 변경할 수 있다.
두 가지 방식에 대해 각각 알아보도록 하자.
값으로 호출하기(call-by-value)
정수나 문자열처럼 변경이 불가능한(immutable) 객체들은 '값으로 호출하기' 방법으로 전달된다고 볼 수 있다. 객체의 참조값이 함수의 매개변수로 전달되지만 함수 안에서 객체의 값을 변경하면 새로운 객체가 생성되기 때문이다.
def modify_value(x):
x = 10
print("Inside function:", x)
a = 5
print("Before function call:", a)
modify_value(a)
print("After function call:", a)
결과는 아래와 같다:
위 예제에서 함수 modify_value() 안에서 매개변수 x의 값을 저장하면 새로운 객체가 생성되어 x에 참조값이 저장된다. 그렇기 때문에 함수 내부에서의 값의 변경이 전역에서는 영향을 미치지 않는 것을 볼 수 있다.
참조로 호출하기(call-by-reference)
그렇다면 변경 가능한(mutable) 객체인 리스트를 함수에 전달하면 어떻게 될까? 리스트도 함수 안으로 참조값으로 전달이 되는데, 위 상황과 다른 점은 리스트는 함수 안에서 변경할 수 있다는 점이다. 즉, 리스트의 요소들은 변경될 수 있다는 것이다. 예제를 통해 살펴보자:
def modify_value(x):
x[0] = 10
print("Inside function:", x)
a = [1, 2, 3, 4]
print("Before function call:", a)
modify_value(a)
print("After function call:", a)
결과는 아래와 같다:
modify_value()에서 리스트 안의 첫 번째 요소를 10으로 변경했다. 실행 결과를 보면 원본 리스트도 변경이 된 것을 볼 수 있다. 이를 그림으로 표현하면 아래와 같다.
정리
결론적으로, 파이썬에서 인자를 전달할 때 값으로 호출하는 방식과 참조로 호출하는 방식의 차이를 이해하는 것은 함수의 동작 방식을 정확히 파악하고 의도치 않은 부작용을 방지하는 데 매우 중요하다. 변경 불가능한(immutable) 객체는 값으로 전달되어 함수 내부에서 원본이 변경되지 않지만, 변경 가능한(mutable) 객체는 참조로 전달되어 함수 내부에서 원본이 변경될 수 있다. 이러한 특성을 잘 이해하고 적절히 활용함으로써 보다 안정적이고 예측 가능한 코드를 작성할 수 있을 것이다. 파이썬 함수의 인자 전달 방식을 명확히 숙지하여 효율적인 프로그래밍 실력을 키워보자.
'Language > Python' 카테고리의 다른 글
[Python] 파이썬 2차원 리스트 (생성, 접근, 활용) (0) | 2025.01.17 |
---|---|
[Python] 파이썬 리스트 컴프리헨션 (리스트 함축, List Comprehension) (0) | 2025.01.16 |
[Python] 파이썬 리스트 복사하기 (얕은 복사 vs 깊은 복사) (0) | 2025.01.15 |
[Python] 파이썬 리스트 비교, 정렬 (0) | 2025.01.15 |
[Python] 파이썬 리스트의 기초 연산들 (요소 추가, 삭제, 삽입 등) (0) | 2025.01.15 |