스택은 메모리의 일부로, 코드 블록 내에서 지역 변수 및 함수 호출의 매개 변수와 반환 값과 같은 임시 데이터를 저장하는 데 사용됩니다. 이러한 데이터는 Last-In-First-Out (LIFO) 방식으로 처리됩니다. 스택은 메모리의 상위 주소에서 낮은 주소로 확장되며, 일반적으로 메모리 할당이 비교적 적고 빠른 속도로 작동합니다. 그러나, 스택에 할당된 메모리는 코드 블록이 끝날 때 자동으로 해제되므로, 저장된 데이터는 코드 블록 내에서만 유효합니다.
# 빈 리스트 생성
stack = []
# 원소 추가
stack.append(1)
stack.append(2)
stack.append(3)
# 최상위 원소 출력 후 제거
print(stack.pop()) # 3
# 최상위 원소 출력
print(stack[-1]) # 2
힙은 메모리의 다른 부분으로, 크기와 수명이 프로그램 실행 중 동적으로 결정되는 데이터에 대한 메모리를 할당하는 데 사용됩니다. 힙은 메모리의 하위 주소에서 상위 주소로 확장되며, 일반적으로 스택보다 큰 메모리 할당이 가능합니다. 그러나, 힙 할당은 스택 할당보다 느리고 메모리 할당 후에도 메모리 해제를 수동적으로 처리해주어야 하기 때문에 작업이 복잡합니다. 힙은 프로그램에서 전역 변수, 정적 변수 및 동적 할당에 사용됩니다.
import heapq
# 빈 리스트 생성
heap = []
# 원소 추가
heapq.heappush(heap, 3)
heapq.heappush(heap, 1)
heapq.heappush(heap, 4)
heapq.heappush(heap, 2)
# 최소값 출력 후 제거
print(heapq.heappop(heap)) # 1
# 최소값 출력
print(heap[0]) # 2