본문 바로가기
카테고리 없음

파이썬 "Mutable Default Argument", 초보자도 이해하기 쉬운 설명과 샘플코드

by 뷰티풀스택 2023. 7. 4.
반응형

가변 기본 인자(Mutable Default Argument)는 함수 정의에서 매개변수의 기본값으로 변경 가능한(mutable) 객체를 사용하는 것을 의미합니다. 이 경우, 함수가 호출될 때마다 매개변수의 기본값이 같은 객체를 참조하게 됩니다. 이러한 동작은 예기치 않은 결과를 초래할 수 있으므로 주의가 필요합니다.

 

다음은 가변 기본 인자를 사용하는 예제 코드입니다.

 

```python

def add_item(item, items=[]):

    items.append(item)

    return items

 

print(add_item('apple'))  # ['apple']

print(add_item('banana'))  # ['apple', 'banana']

```

 

위의 예제에서는 `add_item()` 함수가 호출될 때마다 `items` 리스트에 `item`을 추가합니다. 그러나 해당 함수를 처음 호출하면 `items` 리스트는 빈 리스트로 초기화됩니다.

 

첫 번째 호출 시, `['apple']`이 반환됩니다. 그러나 두 번째 호출 시, `['apple', 'banana']`이 반환됩니다. 이는 `items` 리스트가 기본값으로 설정된 함수 정의 시점에 한 번만 생성되고, 이후에는 계속해서 같은 객체를 참조하기 때문입니다.

 

해결책으로는 기본값으로 변경 불가능한(immutable) 객체를 사용하거나, 기본값을 `None`으로 설정하고 함수 내부에서 새로운 객체를 생성하는 방법을 사용할 수 있습니다.

 

여기에 수정된 예제 코드가 있습니다.

 

```python

def add_item(item, items=None):

    if items is None:

        items = []

    items.append(item)

    return items

 

print(add_item('apple'))  # ['apple']

print(add_item('banana'))  # ['banana']

```

 

이제 `add_item()` 함수가 호출될 때마다 항상 새로운 빈 리스트가 생성되어 사용되므로, 예기치 않은 결과를 방지할 수 있습니다.

 

더 자세한 정보는 파이썬 공식 문서에서 확인하실 수 있습니다. (https://docs.python.org/3/tutorial/controlflow.html#default-argument-values)

 

주의: 주의사항을 지키지 않을 경우, 예기치 않은 결과뿐만 아니라 디버깅이 어려워질 수도 있습니다. 함수를 작성할 때 가변 기본 인자를 사용하면 인자의 값을 외부에서 수정하는 부작용이 있을 수 있으므로, 신중하게 사용해야 합니다.

반응형

댓글