파이썬으로 코딩을 하다 보면 "이게 느린가 빠른가?" 궁금할 때가 많죠.
특히 자료구조(list, dict, set 등)를 어떻게 쓰느냐에 따라 속도 차이가 꽤 납니다.
이번 글에서는 초보자분들이 이해하기 쉽게, **파이썬의 주요 자료형의 속도 차이(=시간 복잡도)**를 한눈에 정리해볼게요!
시간 복잡도란?
간단히 말해, **"데이터가 많아질수록 얼마나 느려지느냐?"**를 나타내는 지표입니다.
예를 들어,
- 어떤 작업이 O(1)이면 = 데이터가 10개든 10만 개든 속도가 거의 안 느려짐
- O(n)이면 = 데이터가 많아질수록 비례해서 느려짐
1. 리스트(list)
리스트는 [ ] 로 감싸서 쓰는 가장 많이 쓰는 자료형
my_list = [1, 2, 3]
작업속도 | (O) | 설명 |
append() | O(1) | 맨 뒤에 추가 (빠름) |
insert(i, x) | O(n) | 중간에 넣을 땐 밀어줘야 해서 느림 |
pop() | O(1) | 맨 뒤에서 꺼내는 건 빠름 |
pop(i) | O(n) | 중간 꺼내면 느림 |
x in list | O(n) | 포함 여부 확인은 일일이 확인 |
리스트는 순서가 중요할 때 좋아요.
하지만 중간에 뭔가 넣거나 지울 땐 좀 느릴 수 있어요.
2. 딕셔너리(dict)
딕셔너리는 key: value 형태로 데이터를 저장합니다.
my_dict = {"apple": 100, "banana": 200}
작업속도 | (O) | 설명 |
값 넣기 (dict[k]=v) | O(1) | 거의 항상 빠름 |
값 읽기 (dict[k]) | O(1) | 바로 찾음 |
삭제 (del dict[k]) | O(1) | 빠름 |
key in dict | O(1) | 존재 여부도 빠름 |
딕셔너리는 **"이름표 붙여서 저장"**하는 느낌.
속도가 매우 빠르기 때문에, 뭔가를 빠르게 찾고 싶을 때 좋아요!
3. 집합(set)
집합은 수학 시간에 배운 그 "집합"이에요. 중복 없이 저장하고, 빠르게 검사할 수 있습니다.
my_set = {1, 2, 3}
작업속도 | (O) | 설명 |
추가 (add) | O(1) | 빠름 |
삭제 (remove) | O(1) | 빠름 |
x in set | O(1) | 매우 빠름! |
set은 중복 제거, 포함 여부 확인에 최고예요.
리스트에서 같은 값이 너무 많을 땐 set으로 바꿔보세요!
4. 튜플(tuple)
튜플은 리스트처럼 생겼지만, 수정이 안 됩니다.
my_tuple = (1, 2, 3)
작업속도 | (O) | 설명 |
인덱싱 t[0] | O(1) | 빠름 |
x in tuple | O(n) | 찾을 땐 느릴 수 있어요 |
튜플은 데이터를 변경할 필요가 없을 때 사용합니다.
속도보단 고정된 값을 표현할 때 좋아요.
문자열(str)도 참고!
문자열도 일종의 자료형입니다.
text = "ddatg"
작업속도 | (O) | 설명 |
인덱싱 s[0] | O(1) | 빠름 |
in 연산 | O(n) | 문자 포함 여부는 느릴 수 있음 |
문자열 붙이기 (+) | O(n) | 많이 붙이면 느려짐 (join 쓰세요!) |
요약표 (한눈에 보기)
자료형 | 추가 | 삭제 | 조회 | 포함 검사 |
list | O(1)/O(n) | O(1)/O(n) | O(1) | O(n) |
dict | O(1) | O(1) | O(1) | O(1) |
set | O(1) | O(1) | - | O(1) |
tuple | - | - | O(1) | O(n) |
str | - | - | O(1) | O(n) |
마무리: 어떤 자료형을 써야 할까?
- 순서가 중요하고 자주 바꿔야 한다 → list
- 빠르게 찾고, 키-값 형태로 저장하고 싶다 → dict
- 중복 없이 저장하고 빠르게 확인하고 싶다 → set
- 수정 불가능한 고정된 값 → tuple
- 글자 다루기 → str
자료형을 잘 고르면 코드가 더 빨라지고, 훨씬 효율적입니다!
앞으로는 리스트만 쓰지 말고, 목적에 맞는 자료형을 고르는 습관을 가져보세요
'프로그래밍 > python' 카테고리의 다른 글
pip freeze 이해하기: Python 개발자를 위한 종합 가이드 (0) | 2025.02.04 |
---|---|
[파이썬] __init__.py 파일 이해하기: 패키지 초기화의 핵심 (0) | 2024.12.30 |
[파이썬] 파이썬의 __init__ 이해하기: 생성자 메서드 (1) | 2024.12.30 |
[파이썬] random 모듈 사용 방법 (1) | 2024.12.27 |
[OpenCV] OpenCV를 활용한 퍼스펙티브 변환 (Perspective Transformation) (0) | 2024.09.05 |
댓글