>백엔드 개발 >파이썬 튜토리얼 >Python의 변경 가능한 기본 인수 동작이 왜 그렇게 놀라운 것처럼 보입니까?

Python의 변경 가능한 기본 인수 동작이 왜 그렇게 놀라운 것처럼 보입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-24 08:46:20862검색

Why Does Python's Mutable Default Argument Behavior Seem So Surprising?

"최소 경악"과 변경 가능한 기본 인수

변경 가능한 기본 인수를 사용한 Python의 놀라운 동작은 수많은 개발자를 당황하게 했습니다. 다음을 고려하십시오.

def foo(a=[]):
    a.append(5)
    return a

직관적으로 이 함수는 매개변수 없이 호출할 때 항상 [5]만 포함하는 목록을 반환할 것으로 예상할 수 있습니다. 그러나 이 가정은 실제 출력에 의해 깨졌습니다.

>>> foo()
[5]
>>> foo()
[5, 5]
>>> foo()
[5, 5, 5]
>>> foo()
[5, 5, 5, 5]

그래, 무슨 일이 일어나고 있는 걸까요?

핵심은 Python의 일류 함수 개체에 있습니다. 함수가 정의되면 기본 인수 평가를 포함하여 즉시 평가됩니다. foo의 경우 a의 기본값은 빈 목록으로 평가됩니다. 그러나 이 목록은 함수 객체 자체 내에 저장되므로 후속 호출에서 변경할 수 있습니다.

C와 같은 언어와 달리 Python의 함수 매개변수는 컴파일 타임에 평가되는 정적 변수가 아닙니다. 대신 시간이 지남에 따라 변경될 수 있는 개체에 바인딩됩니다. 함수 개체의 "멤버 데이터" 개념은 변경 가능한 기본 인수로 관찰되는 놀라운 동작을 설명합니다.

effbot이 Python의 기본 매개변수 값에서 언급한 것처럼 이 동작은 논리적이며 다른 개체가 작동하는 방식과 일치합니다. :

"모든 개체는 한 호출에서 다른 호출로 상태가 변경될 수 있습니다. 왜 함수가 달라야 합니까?"

따라서 이 동작은 처음에는 놀라울 수도 있지만, 궁극적으로는 Python의 객체 지향 특성과 변경 가능한 객체 동작에 대한 기대에 맞춰 "최소 놀라움"의 원칙을 따릅니다.

위 내용은 Python의 변경 가능한 기본 인수 동작이 왜 그렇게 놀라운 것처럼 보입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.