CPython의 내장 타입 연산 시간 복잡도 총정리

Time complexity of operations on Python's built-in types

CPython의 내장 타입 연산 시간 복잡도 총정리

CPython의 내장 타입(list, tuple, dict, set, str 등)별 연산의 시간 복잡도를 Big O 표기법으로 정리한 문서입니다. 각 연산이 입력 크기에 따라 어떻게 실행 시간이 증가하는지 보여주며, 특히 list의 append는 O(1)이지만 중간 삽입/삭제는 O(n)이라는 점, dict와 set의 평균 O(1) 연산이 해시 충돌 시 O(n)으로 악화될 수 있다는 점 등을 강조합니다. 또한 tuple, frozenset, memoryview, range 등 불변 타입의 특성과 예외 사항도 다룹니다.

목록의 가장 큰 비용은 현재 할당 크기를 초과하여 늘어날 때(모든 요소를 이동해야 하므로) 또는 시작 부분 근처에서 삽입하거나 삭제할 때(그 뒤의 모든 요소를 이동해야 하므로) 발생합니다.
  1. alexpotato

    Dave Beazley는 Python 내장 타입을 데이터 분석 및 기타 빠른 작업에 사용하는 방법에 대한 훌륭한 강연을 했습니다 [0]. 메타적인 참고로, 저는 수년간 이러한 내장 타입들을 많이 사용해 왔지만, LLM 덕분에 점점 덜 사용하게 되었습니다. 그 비디오를 다시 보는 것은 마치 부시크래프트 전문가가 칼과 톱만으로 의자를 만드는 것을 보는 것과 거의 같았습니다...

    0 - https://www.youtube.com/watch?v=lyDLAutA88s

  2. mwkaufma

    O(n - k) 또는 O(len(l1) + len(l2))는 그냥 O(n) 아닌가요? 복잡도 분석과 사이클 계산 사이의 경계를 흐리게 하는 대신, 복잡도와 추정된 상대적 사이클 수를 별도의 측정치로 모두 출력하면 됩니다.

  3. StellarScience

    Python은 유명하게도 해시 테이블을 중심으로 구축되었습니다. 그래서 몇 버전 전에 해시 테이블 구현을 개선했고, 전체 언어가 몇 퍼센트 빨라졌습니다. 그러나 O(log(N)) 복잡도를 가진 데이터 구조가 전혀 없다는 것은 놀랍습니다. 분명히 그것이 바람직한 사용 사례가 있을 텐데요?

이 날의 다른 글

2026-08-29