2014-07-23 3 views
0

비슷한 질문이 있습니다. Python variable scope error. 불변 변수와 관련이 있습니다. 하지만 mutable 변수를 테스트 할 때 파이썬 인터프리터가 변수의 범위를 결정하는 방법을 모르겠습니다. 변경 가능한 대python 변수 범위가

def test_immutable(): 
    a = 1 
    b = 2 

    def _test(): 
     print(a) 
     print(b) 

     a += 1 
     print(a) 

    _test() 

def test_mutable(): 
    _dict = {} 

    def _test(): 
     print(_test.__dict__) 

     _dict['name'] = 'flyer' 

     print('in _test: {0}'.format(_dict['name'])) 

    _test() 

    print(_dict['name']) 


if __name__ == '__main__': 
    # test_immutable() # throw exception 
    test_mutable() # it's ok 
+1

귀하의 질문은 귀하가 링크 한 것과 동일합니다. 하나의 경우에는 변수를 할당하고, 다른 경우에는 참조하는 * 경우에 해당합니다. – Bakuriu

답변

2

불변의 변수 범위 지정과는 아무것도이 없습니다 :

여기 내 예제 코드입니다. 변수는 이름 일 뿐이며 항상 같은 방식으로 작동합니다. 범위 지정은 컴파일 타임에 결정됩니다. 파이썬은 여러분이 할당 할 대상을 알기 오래전입니다.

두 함수의 차이점은 a+= 연산자를 사용하여 a에 직접 할당되므로 a이 로컬이됩니다. 두 번째 것은 _dict 키를 할당합니다.이 키는 궁극적으로 dict 개체의 메서드를 호출하며 변수의 범위 지정에는 영향을주지 않습니다.