📚 [Archive] CS & AI 스터디/[STUDY] Python 기초 🐍

[Python] 글로벌 변수와 로컬 변수 이해하기 😉

히주 2024. 12. 24. 12:50

파이썬을 배우다 보면 '글로벌 변수'와 '로컬 변수'라는 용어를 자주 접하게 됩니다. 저도 방금 접했거든요. 이 개념에 대해서 명확하게 이해하는게 저의 정신건강에 좋을 것 같아 정리해요! 이 글에서 글로벌 변수가 무엇인지, 그리고 그것들이 파이썬에서 어떻게 작동하는지 쉽게 설명해보도록 하겠습니다!!


🚨문제! - 출력 결과물은?

a = 1
def vartest(a):
	a = a + 1
    
vartest(a)
print(a)

저는 처음에 2 가 나올 것이라 생각했지만, 코드를 실행시켜보니 1이 나오더군요.

그 이유가 글로벌 변수와 로컬 변수에 대한 지식이 없어서 햇갈렸었어요...

왜 1이 나오게 됐는지 알아보기에 앞서 글로벌 변수와 로컬 변수에 대한 지식을 쌓아봅시다.

 


 

🌍 글로벌 변수(Global Variable)란?

함수 외부에서 정의된 변수입니다. 프로그램 전체에서 접근이 가능하며, 여러 함수에서 사용할 수 있습니다.

x = 10  # x 는 글로벌 변수

def print_global():
    print(x)  # x는 함수 외부에서 정의된 글로벌 변수

print_global()  # 10 출력

 

🏠 로컬 변수(Local Variable)란?

함수 내부에서 정의된 변수입니다. 해당 함수 내부에서만 사용 가능하며, 함수가 종료되면 사라지며 외부에서는 접근할 수 없습니다.

def my_function():
    y = 5  # 로컬 변수
    print(y)

my_function()  # 5 출력
print(y)  # 오류 발생 (y는 함수 내에서만 존재)

 

 

⚔️ 글로벌 변수와 로 변수의 충돌

함수 내부에서 글로벌 변수와 동일한 이름의 변수를 정의하면, 그 변수는 로컬 변수가 됩니다. 즉, 함수 내부에서는 로컬 변수가 우선 사용됩니다.

x = 10

def change_variable():
    x = 20  # 새로운 로컬 변수 x 생성
    print(x)

change_variable()  # 20 출력
print(x)  # 10 출력 (글로벌 변수 x는 변경되지 않음)

 

 

🔧 글로벌 변수 수정하기

함수 내부에서 글로벌 변수를 수정하려면 global 키워드를 사용해야 합니다.

x = 10

def modify_global():
    global x  # 글로벌 변수 x 사용 선언
    x = 20

modify_global()
print(x)  # 20 출력 (글로벌 변수 x가 변경됨)

 

 


 

🚨문제 해결하기

    # 'a = 1'에 있는 값과 'def vartest(a):'에 있는 값의 a는 다른 값임!
    
a = 1 # 글로벌 변수



# - (로컬) - 

def vartest(a): # 로컬변수(매개변수)
    a = a + 1 
    
# - (로컬) - 
    
    
vartest(a) # 글로벌 변수
print(a) # 글로벌 변수

# 매개변수? : 함수에게 사용하기 위한 변수임
#            함수를 호출을 할 때 넘겨주는 인자로 사용됨

설명

  • a = 1은 글로벌 변수입니다.
  • def vartest(a):에서의 a는 로컬 변수입니다.
  • 이 a는 함수 내부에서만 존재하며 함수 바깥의 a(글로벌 a)와는 다른 변수입니다.
  • vartest(a)를 호출해도 함수 내부에서 바뀐 a 값은 함수 밖으로 나오지 않습니다.
  • 따라서 print(a)는 여전히 글로벌 변수 a의 값인 1을 출력합니다.

 

🔧 수정하기

# 해결법 1)  return 변수 사용

a = 1

def vartest(a):
    a = a+1
    return a

a = vartest(a)
print(a)

설명

  1. vartest 함수는 로컬 변수 a를 수정한 후 그 값을 return합니다.
  2. 이 return된 값을 다시 글로벌 변수 a에 저장함으로써 글로벌 a가 업데이트됩니다.

 

# 해결법 2) global 변수 사용

a = 1
def vartest():
    global a
    a = a+1

vartest()
print(a)​

설명

  1. global로 함수 안에서 글로벌 변수를 직접 수정합니다.
  2. vartest 함수는 로컬 변수를 만들지 않고 글로벌 a를 직접 수정합니다.
  3. global a는 vartest 함수 안에서도 글로벌 a를 참조하고 수정하도록 합니다.