Python함수와 모듈

기본 인자와 None 패턴

변경 가능한 기본값의 함정을 피하고, `None`으로 안전하게 초기화하는 Python 함수 설계의 핵심 패턴입니다.

마지막 수정 2026년 3월 19일

기본 패턴

python
def append_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

설명

  • Python 함수의 기본값은 함수가 호출될 때마다 새로 만들어지는 것이 아니라, 함수 정의 시점에 한 번 평가됩니다.
  • 따라서 리스트나 딕셔너리 같은 가변 객체를 기본값으로 두면 여러 호출이 같은 객체를 공유할 수 있습니다.
  • 이 문제를 피하는 가장 흔한 패턴이 None을 기본값으로 두고 함수 내부에서 새 객체를 만드는 방식입니다.
  • 함수 인터페이스를 유연하게 유지하면서도 예측 가능한 동작을 만들기 좋은 패턴입니다.

짧은 예제

python
def collect_name(name, names=None):
    if names is None:
        names = []
    names.append(name)
    return names

빠른 정리

방식결과
items=[] 기본값호출 간 상태가 공유될 수 있음
items=None 후 내부 초기화호출마다 새 객체 생성 가능
가변 기본값주의 필요
불변 기본값상대적으로 안전

공식 참고: More on Defining Functions

주의할 점

가변 기본값 문제는 문법 오류가 아니라 논리 오류라서 더 위험합니다. 처음에는 잘 동작하는 것처럼 보여도 여러 번 호출되면 의도하지 않은 값이 누적될 수 있습니다.