Namespace는 language semantics의 일부로, 변수 이름과 객체(의 메모리 주소)의 mapping이다. Scope별로 namespace가 정의되어 있으며, 변수를 참조할 때마다 namespace를 확인하게 된다. 서로 다른 namespace에 동일한 이름의 변수가 존재할 수 있으며, 이 때 가장 가까운 scope가 우선순위를 갖는다.

Python assignment는 namespace에 변수가 존재하지 않으면 새로 선언하기 때문에 일반적인 assignment로는 outer scope의 변수의 값을 변경할 수 없다. Namespace를 통해 직접 참조해야 한다.

1
2
3
4
5
6
7
x = 3                         # Assignment: x -> addr(3) in global namespace
def func():
    x = 4                     # Assignment: x -> addr(4) in func namespace
    globals()['x'] = 1        # Assignment: x -> addr(1) in global namespace
    print(x)                  # Reference:  x -> addr(4) in func namespace
    print(globals()['x'])     # Reference:  x -> addr(1) in global namespace
print(x)                      # Reference:  x -> addr(1) in global namespace

Namespace 출력하기

  • globals(): global namespace를 보여준다.
  • locals(): 현재 scope의 namespace를 보여준다.


Back