혼공파 54 ~ 56 강
1. 스택과 힙 / 함수의 할당과 참조
# 자료구조
# 스택과 힙 : 너무너무 유용!
# 메모리 관리에서의 스택과 힙
# 현대적인 프로그래밍 언어
# 자료를 크게 2가지로 구분
# (1) 기본 자료형 : 작고 간단한 것
# 숫자, 문자열, 불 등
# 크기가 작고 고정되어 있으므로 상자에 넣어서 옆에 차곡차곡 보관
# 스택에 넣어서 보관한다
# (2) 복합 자료형 : 크고 무거운
# 리스트, 딕셔너리, 객체
# 크기가 정해져 있지 않고,
# 다른 창고에 보관을 하고, 이 위치를 상자에 넣어 차곡차곡 보관
# 힙이라는 창고에 보관하고 스택에 위치를 보관한다
# 할당과 참조
## 할당 : 값을 저장하는 것
a = 10
b = True
c = "안녕하세요"
## 접근/참조 : 저장된 값을 가져가 쓰는 것
print(a)
print(b)
print(c)
### 함수에서의 할당!
a = 10
b = [1, 2, 3, 4]
def function():
a = 20
b = [5, 6, 7, 8]
print(a) # 20
print(b) # [5, 6, 7, 8]
function()
print(a) # 10
print(b) # [1, 2, 3, 4]
# 함수 호출 할 때 마다 함수 스택이 따로 만들어 진다
# 파이썬에서 변수를 참조할 때는
# 자신과 가까운 스택부터 위로 올라가면서 참조
2. 메모리 구조와 global 키워드
# 전역 위치에서 a, b라는 변수를 생성
a = 10
b = [1, 2, 3, 4]
def function():
global a, b # 함수 스택이 아닌 글로벌 스택 값을 이용
a = 20
b = [5, 6, 7, 8]
print(a) # 20
print(b) # [5, 6, 7, 8]
function()
print(a) # 20
print(b) # [5, 6, 7, 8]
# 함수 호출 할 때 마다 함수 스택이 따로 만들어 진다
# 파이썬에서 변수를 참조할 때는
# 자신과 가까운 스택부터 위로 올라가면서 참조
# 전역 위치에서 a, b라는 변수를 생성
a = 10
b = [1, 2, 3, 4]
def function():
a = 20
b.extend([5, 6, 7, 8])
# 스택을 변경하지 않기 때문에 global 사용하지 않아도 오류없이
# 함수 내부의 b가 없으므로 글로벌 스택의 b 값을 이용한다.
print(a) # 20
print(b) # [1, 2, 3, 4, 5, 6, 7, 8]
function()
print(a) # 10
print(b) # [1, 2, 3, 4, 5, 6, 7, 8]
3. 함수의 값 복사와 레퍼런스 복사
# 변수를 변수에 할당하면[복사하면]
# 스택에 있는 것이 할당[복사]되는 것이다!
a = 10
b = a
a = 20
print(a) # 20
print(b) # 10
# 주소를 스택에 저장
a = [1, 2, 3, 4]
b = a # 스택에는 리스트의 주소가 저장되어 있다!!
a = [5, 6, 7, 8] # 새로운 리스트를 다른 힙에 저장하고 주소가 바뀜
print(a) # [5, 6, 7, 8]
print(b) # [1, 2, 3, 4]
a = [1, 2, 3, 4]
b = a # 스택에는 리스트의 주소가 저장되어 있다!!
a.append(5) # 기존 스택에 5를 추가한다.
print(a) # [1, 2, 3, 4, 5]
print(b) # [1, 2, 3, 4, 5]
# 매개변수 복사
a = 10
b = [1, 2, 3, 4]
print(a, b) # 10 [1, 2, 3, 4]
def function_a(c, d):
c = 20
d = [5, 6, 7, 8]
function_a(a, b)
print(a, b) # 10 [1, 2, 3, 4]
def function_b(c, d):
c = 30
d.extend([9, 10])
function_b(a, b)
print(a, b) # 10 [1, 2, 3, 4, 9, 10]
'Base > Python' 카테고리의 다른 글
15. 튜플/ 이뮤터블 자료 / 뮤터블 자료 (0) | 2023.03.03 |
---|---|
14. 재귀함수 / 피보나치수열 / 조기리턴과 리스트 평탄화 (0) | 2023.03.01 |
12. 함수 / 매개변수 / 함수의 리턴 (1) | 2023.02.23 |
11. 복잡도/프로그램/루틴/프로시저/메서드/함수 (0) | 2023.02.21 |
10. 리스트와 딕셔너리 관련 기본 함수 / 리스트 내포 / join함수 (1) | 2023.02.20 |
댓글