Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 재귀 함수는 자기 자신을 호출할 때마다 새로운 네임스페이스를 생성할까?

네, 새로운 네임스페이스가 생성됩니다

네, 함수 호출이 일어날 때마다 새로운 네임스페이스가 생성됩니다. 물론 이것은 재귀 호출에만 국한된 것이 아니라 모든 함수 호출에 해당하는 동작입니다. 하지만 한 가지 중요한 점이 있습니다. 바로 매개변수로 전달되는 객체(object)는 참조(reference) 방식으로 전달된다는 것입니다.

참조 전달이 의미하는 것

따라서 새로 생성된 네임스페이스는 이 참조값의 복사본을 자체적으로 갖게 되지만, 그 참조는 여전히 호출한 함수(caller)와 동일한 객체를 가리킵니다. 그렇기 때문에 함수 내부에서 해당 객체의 내용을 변경하면, 호출한 함수 쪽에서도 그 변경 사항이 그대로 반영되어 나타납니다.

인터프리터의 내부 동작 원리

좀 더 구체적으로 살펴보면, 파이썬 인터프리터가 함수 호출을 만나면 프레임(frame) 객체를 생성하고 이를 프레임 스택(frame stack)에 푸시(push)합니다. 프레임이 생성될 때마다 해당 프레임에는 고유한 프라이빗 네임스페이스가 할당되며, 프레임 내부의 각 변수는 이 네임스페이스 안에서 새롭게 정의됩니다.

정리하자면, 재귀 함수가 자기 자신을 호출할 때마다 독립적인 네임스페이스를 가진 새로운 프레임이 만들어지지만, 인자로 전달된 가변 객체(mutable object)의 경우 참조가 공유되므로 객체 자체의 변경은 모든 호출 단계에 영향을 미친다는 점을 기억해 두는 것이 좋습니다.