def func(x:int):
x+=1
y="local"
return
x=1
print(x)
func(x)
print(x)
1
1
위 코드에서 x값의 변화가 없듯이, 함수의 parameter 포함, 내부에서 선언된 변수는 함수실행 이후 유효범위에서 벗어난다.
python의 pass by assignment에 따라 mutable 한 객체 (list,dict 등)은 함수 내부에서 local 변수로 복사 없이 사용 가능하지만 immutable한 객체(int,str,tuple 등)은 어떻게 해야될까?
이를 해결하기 위한 방법 중 하나가 함수 내부에서 전역변수임을 나타내는 키워드, 'global'을 사용하는 것이다.
def func(a:int):
a+=10
global x
x+=1
return
x=10
print(x)
func(x)
print(x)
10
11
주의 할 점으로 전역변수 선언과 동시에 할당은 할 수 없다는 것이다.
global var
와 같이 선언 후에 값을 수정할 수 있다.
또 전역변수 선언 여부와 관계없이 매개변수로 전역변수를 인자로 주어도 매개변수가 받은 값은 복사된 값이므로 원본 데이터에 영향을 주지 않는다.