프로그램 실행 시 메모리
Text Area : 컴파일된 코드가 올라가는 영역
String Area : 문자열이 올라가는 영역(Read Only)
파이썬에서의 우선 순위
Local → Global → Builtins
# 전역 변수
g = 10 # 함수 바깥에서 선언되었으므로 전역 변수이다.
# 지역 변수
def func():
g = 100 # 함수 body 안에서 선언되었으므로 지역 변수
print('func g = ', g) # LGB 규칙에 의해, local이 우선이므로 지역변수가 출력된다.
func() # 함수가 호출되며 지역 변수 stack 메모리 할당 -> 함수 끝나며 지역 변수 stack에서 사라짐
print('g = ', g) # LGB 규칙에 의해, local이 없으므로 global 변수가 출력된다.
# keyword 'global' : 함수 안에서 전역 변수의 값을 바꿔줄 수 있다
def func_local():
global g
g = 100
func_local()
print('global g = ', g)
# 객체를 참조하는 변수
def func_list():
my_list = [10, 20, 30]
print(id(my_list))
return my_list
rst = func_list()
print(id(rst)) # 주소는 함수 안과 같다. 같은 리스트 객체를 참조하기 때문이다.
print(rst)
# 함수가 호출되면
# heap 메모리에 list 객체(클래스)가 생성된다
# my_list라는 함수 지역 변수가 stack 영역에 생성되어 리스트를 참조하게 된다
# 함수 호출이 끝나면 참조 카운트가 1에서 0으로 바뀌면서 리스트 객체도 힙에서 사라진다.
# 하지만 지금은 rst라는 전역 변수가 리스트를 참조하므로 카운트가 0이 아니게 되므로 힙에서 사라지지 않는다.
# Builtin 함수(빌트인 함수)
print(dir(__builtins__)) # 파이썬 내장 빌트인 함수 확인하기
# 빌트인 함수의 LGB 규칙
str = 'abc' # str이라는 전역 변수 선언
def func_str():
str = 'cde'
print(str)
func_str()
print(str)
a = 10
a = str(a) # 이미 str이라는 변수를 전역 변수로 사용해버렸기 때문에 빌트인 함수를 사용할 수 없다...
print(a, type(a))