코딩/파이썬

파이썬 메모리 구조(1) 기본

METACODING 2023. 10. 19. 02:58
728x90
반응형

현대적인 프로그래밍 언어에서의 자료를 2가지로 크게 구분한다.

(1) 기본자료형 : 작고간단한것

숫자, 문자열, 불리언 등

크기가 작고 고정되어 있으므로 상자에 넣어서 옆에서 차곡차곡 보관한다.

ex) a = 10

         b = True

                       c = "안녕하세요"

 

(2) 복합자료형 : 크고 무거운 것

리스트, 딕셔너리, 객체 등은 크기가 정해져 있지 않고

다른창고에 보관을하여 이 위치를 상자에 넣어서 차곡차곡 보관한다.

 

대학교 컴퓨터공학과 2학년들은 자료구조를 배우면서

스택과 힙을 다루게 되는데 스택과 힙은 너무 유용하여 많은 분야에서 쓰여진다.

메모리관리의 스택과 힘에서

파이썬은 작은상자에 기본자료형을 저장하며

이를 쌓아서 모아두는데, 이렇게 기본 자료형들이 정리되어 있는 공간을 스택이라고 한다.

반면,

객체자료형은 무겁고 크기가 정형화되어 있지 않은데,

스택처럼 차곡차곡 쌓아서 정리할 수 없으므로 파이썬은 이를 거대한창고에

넣어두고 이렇게 객체자료형들이 저장되어 있는 거대한 창고를 힙이라고부른다.

예시) d = [1,2,3,4,5] e = {"이름": "구름", "나이":6}

 

스택에 있는 자료는 잘 정리되어 있어 쉽고 빠르게 찾지만,

힙에 있는 자료는 힙이라는 창고가너무 크기 때문에 쉽게 찾을 수 없다.

그래서

파이썬은 리스트와 딕셔너리 같은 큰 자료형을

힙이라는 창고에 넣어두고 창고의 어떤 위치에 저장 했는지를 스택에기록한다.

위의 위치들은 0x01, 0x06 같은 형태의 16진수 숫자로 표현하는데, 앞에 붙어있는

0x'이 숫자는 16진수로 특별한 값이다'를 나타낸다.

a = 10 < 숫자

b = True < 불리언

c = '안녕하세요' < 문자열

d = [1, 2, 3, 4] < 리스트

e = {"이름": "구름", "나이":8} < 딕셔너리

 할당과 참조

할당

a = 10 < 숫자

b = True < 불리언

c = '안녕하세요' < 문자열

d = [1, 2, 3, 4] < 리스트

e = {"이름": "구름", "나이":8} < 딕셔너리

 

접근

print(a) print(b) print(c) print(d) print(e)

 

함수할당과 함수스택

함수할당 = 함수호출을 하면 함수스택을 만들고

함수호출을 1번하면, 함수스택을 1개 함수호출 100번하면, 함수스택100개를 만든다.

a=10

b=[1,2,3,4]

def function():

a=20

b=[5, 6, 7, 8]

function()

print(a)

print(b)

함수스택

a=10

b=[1,2,3,4]

파이썬에서 변수를 잠조할 땐

자신과 가까운 스택부터 위로 올라가면서 참조

def function():

a=20

b=[5, 6, 7, 8]

print(a)

print(b)

function()

print(a)

print(b)

728x90
반응형