강사님: 김용담
Python List
리스트란?
- 특정 순서로 나열된 항목의 모음이다.
- 동일한 값이 두 번 이상 포함 될 수 있다.
- 각 항복은 별개의 항목으로 관주 ^1
리스트의 종류
- Linked Lists
- Arrays (가변 길이 or dynamic array(동적배열)^2)
파이썬의 리스트
특징
- 동적 배열
- 초기 크기를 지정하지 않아도 됨
- 초기 크기는
0
- 초기 크기는
- 여러 자료형을 저장 할 수 있음
파이썬 리스트 구조
표현 코드
l = list()
요소 추가 과정
- 추가
l.append("a")
크기가 4 인 블록을 가리키게 된다.
- 가득차면?
파이썬은 가득차면 List의 크기를0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
이렇게 늘려 간다고 한다.
증가시키는 알고리즘은, ^3
/* cpython/Objects/listobject.c */ /* The growth pattern is: 0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ... */ /* currently: new_allocated = 5 + (5 >> 3) + 3 = 8 */ new_allocated = (size_t)newsize + (newsize >> 3) + (newsize < 9 ? 3 : 6);
l.append("a")
l.append("a")
l.append("a") # <- 가득참
l.append("b")
추가하는 과정 코드
# 빈 리스트 생성
lst = []
print(f"Initial size: {sys.getsizeof(lst)} bytes")
# 요소 추가하며 메모리 크기 변화 확인
for i in range(26):
lst.append(i)
print(f"Length: {len(lst)}, Allocated size: {sys.getsizeof(lst)} bytes")
출력결과
Initial size: 56 bytes
Length: 1, Allocated size: 88 bytes
Length: 2, Allocated size: 88 bytes
Length: 3, Allocated size: 88 bytes
Length: 4, Allocated size: 88 bytes
Length: 5, Allocated size: 120 bytes
Length: 6, Allocated size: 120 bytes
Length: 7, Allocated size: 120 bytes
Length: 8, Allocated size: 120 bytes
Length: 9, Allocated size: 184 bytes
...
Length: 21, Allocated size: 256 bytes
Length: 22, Allocated size: 256 bytes
Length: 23, Allocated size: 256 bytes
Length: 24, Allocated size: 256 bytes
Length: 25, Allocated size: 256 bytes
Length: 26, Allocated size: 336 bytes
요소를 추가하면서 일정구간에서 용량이 갑자기 늘어나는 지점이 있다.
그리고, 일정요소가 추가될때까지 동일한 메모리 공간을 유지하는것을 알 수 있다.
마무리
파이썬의 동적으로 메모리 확장하는 과정을 알아 보았다. 특히, 테스트 코드를 통해 메모리 크기가 동적으로 커지고 유지되는 과정이 흥미로웠다.
'프로그래밍 > AI' 카테고리의 다른 글
Git 학습 (1) | 2024.12.16 |
---|---|
멀티 쓰레드와 멀티 프로세스 (1) | 2024.12.11 |
해시 함수 와 해시충돌 (1) | 2024.12.11 |
Computational Thinking (0) | 2024.12.06 |
통계학(6) 공분산 행렬 (0) | 2024.12.02 |