주석을 보면 growth pattern은 0,4,8,16,25,35,... 이다. 처음은 2배씩 증가하지만 점점 감소하는 걸 볼 수 있다. 이러한 재할당 비율은 growth factor (성장 인자) 라고 하며, 파이썬의 growth factor는 전체적으로는 1.125로 다른 언어에 비해서는 다소 조금만 늘려가는 형태이다. (C++의 경우는 2배, java의 경우는 1.5배)
그림을 보면, 크기와 용량도 같이 저장되어 있는 걸 볼 수 있음. (pythonList 구조체 같이 정의를 해놓았을 듯)
더블링을 해야할 만큼 공간이 차게 되는 경우, 위에서 말했던 것처럼 O(n)의 비용이 발생하게 된다. 그러나 이는 최악의 경우 O(n)이 된다는 것이고, 이는 자주 일어나는 일이 아니므로 "분할 상환 분석"에 따른 입력 시간은 여전히 O(1)이다.
3. 연결리스트
연결리스트는 배열과 달리 물리 메모리를 연속적으로 사용할 필요가 없다. 따라서 동적으로 새로운 노드를 삽입 및 삭제하는 것이 간편하다. 데이터를 구조체로 묶어서 포인터로 연결하는 개념으로 구현된다. (연속된 메모리 공간에 할당되는 것이 아니므로 메모리 내에 scattered되어 있다고 보면 됨)
연결리스트는 원소가 메모리 공간에 연속적으로 존재하지 않으므로 특정 인덱스(원소)에 접근하기 위해서는 전체를 순서대로 읽어야 함. 즉 배열 원소 개수에 dependent이므로 O(1)에 값 조회가 불가능하고, O(n)에 조회가 가능하다. 반면, 연결리스트의 시작 또는 끝 지점에 아이템을 추가하거나 삭제, 추출하는 작업은 O(1)에 가능하다. (그냥 포인터만 바꿔주면 되기 때문) 연결리스트는 스택 구현에 쓰이는 자료형이다.