IT/Python

[Python] 지역변수와 전역변수

땅일단 2024. 1. 18. 23:31

1. 메인함수에 정의된 변수는 전역변수이다.

def testFunc():
    print(n)    # 5

if __name__=="__main__":
    n = 5
    testFunc()

 

 

2. 사용자 함수에 전역변수와 같은 이름의 변수를 정의했다면, 그 변수는 해당 함수 안에서 더는 전역변수로 쓰이지 않고, 함수 내부에서만 쓰는 지역변수가 된다.

def testFunc():
    if n == 5:
       n = n + 1    # 오류 발생
       print(n)

if __name__=="__main__":
    n = 5
    testFunc()

 

testFunc() 안에서 n = n + 1 이란 부분 때문에 n은 지역변수로 새로 정의되었다.

그런데 n에 숫자값을 대입하기도 전에 n에 n + 1 을 대입하니 오류가 발생한다.

 

 

3. 사용자 함수에서 전역변수의 값을 변경하고 싶다면 global을 이용한다.

def testFunc():
    global n
    if n == 5:
       n = n + 1    # 6
       print(n)

if __name__=="__main__":
    n = 5
    testFunc()
    print(n)    # 6

 

 

4. 전역 변수인 리스트의 '요소'는 global을 사용하지 않더라도 사용자 지정 함수에서 값을 변경할 수 있다.

def testFunc():
    a[0] = 4

if __name__=="__main__":
    a = [1, 2, 3]
    testFunc()
    print(a)    # [4, 2, 3]

 

파이썬에서 리스트는 1, 2, 3의 값을 직접 저장하는 것이 아닌, 해당 값들이 각각 저장된 주소들을 메모리에 저장합니다.

그래서 a[0] 도 사실은 1이라는 값 자체가 아니라 1을 가리키는 주소가 저장되어 있으니, 이 주소가 가리키는 곳에 4를 대입하는 것이 가능합니다.

 

비슷하게 자바스크립트에서도 값을 변경하지 않는 상수를 선언할 때 const 로 선언하는데, 리스트의 요소는 const라도 변경이나 추가, 삭제 등이 가능합니다.