전역 변수는 전체 영역에서 접근 할 수 있는 변수입니다.
특정 함수 내에서만 접근할 수 있는 변수입니다.
그러면 전역변수는 전역변수 선언한 곳에서만 바꿀수있고 ,
지역변수는 그 특정 함수 내에서만 접근해서 변수를 바꿀수있을까 ??
답은 아니다
지역변수 같은 경우는 맞지만 전역변수는 특정 함수 내에서 전역변수를 바꿀수가 있다.
g_var = 10
def func():
global g_var
g_var = 20
print(f"g_var : {g_var} before") # g_var : 10 before
func()
print(f"g_var : {g_var} after ") # g_var : 20 after
그냥 바꿀수는 없고 ,
global 라는 문법이 필요하다.
def change_value(x, value):
x = value
print(f"x : {x} in change_value") # x : 20 in change_value
x = 10
change_value(x, 20)
print(f"x : {x} in main") # x : 10 in main
x 는 10 을 참조하게 된다.
그리고 change_value() 함수를 호출하면서 인자 x 를 전달한다.
함수를 호출하게 되면
x = value 코드가 실행되게 되는데 ,
x 가 value 가 가리키는 상수 객체를 참조하게 됩니다.
그러면서 change_value() 함수의 호출을 완료 한 스택프레임에는
전역변수에 있는 x 가 10을 참조하게 되는것만 남게 된다.