[Python 팁] list는 아는데 deque 모르면 주니어.
우리는 매일 코드에서 리스트(list)를 사용하죠. 하지만 많은 개발자들이 아주 간단하면서도 코드를 더 빠르고 효율적으로 만들어 줄 리스트 트릭을 놓치고 있다는 사실, 알고 계셨나요? 🤔
저도 이 방법을 1년 넘게 무시했었는데요, 어느 날 제 실수를 깨닫고 나서부터는 이 간단한 기술에 푹 빠졌습니다. 오늘은 여러분께 리스트의 문제점을 설명하고, 그 해결책을 소개한 뒤, 실제 증거까지 보여드릴게요.
그럼, 시작해 볼까요? 🚀
🚨 리스트의 문제: 느린 연산 속도
파이썬의 리스트는 정말 훌륭합니다. 하지만 딱 한 가지 약점이 있죠:
시작 부분에서 요소를 삽입하거나 삭제할 때 속도가 느리다는 점입니다.
예를 들어 볼까요? 다음과 같은 리스트가 있다고 해봅시다.
numbers = [1, 2, 3, 4, 5]
여기에 맨 앞에 숫자를 추가하려면 이렇게 하면 됩니다.
numbers.insert(0, 99)
이제 리스트는 [99, 1, 2, 3, 4, 5]가 되겠죠.
하지만 여기서 문제는, 파이썬이 99를 추가하기 위해 기존의 모든 요소를 오른쪽으로 한 칸씩 밀어야 한다는 점이에요. 😨
📌 작은 리스트라면 큰 문제가 없지만, 리스트가 커질수록 속도 저하가 심각해집니다.
✅ 해결책: deque를 활용하세요! 🔥
다행히 파이썬에는 이 문제를 해결할 수 있는 비밀 병기가 있습니다. 바로 **collections 모듈의 deque(double-ended queue, 양방향 큐)**입니다.
deque는 양쪽 끝에서의 삽입과 삭제를 빠르게 처리하도록 최적화되어 있어요. 🚀
사용법은 매우 간단합니다. 👇
from collections import deque
numbers = deque([1, 2, 3, 4, 5])
이제 맨 앞에 숫자를 추가하려면?
numbers.appendleft(99)
print(numbers) # deque([99, 1, 2, 3, 4, 5])
놀랍게도, deque는 요소를 밀거나 기다릴 필요 없이 즉시 삽입을 완료합니다. 🎯
🏎️ 왜 deque가 더 빠를까요?
이 차이를 이해하려면 리스트와 deque의 내부 구조를 알아야 합니다. 🧐
📌 리스트(list) vs. deque
자료구조 내부 구조 맨 앞 삽입/삭제 속도
리스트 (list) |
배열 (array) |
⏳ O(n) (느림) |
deque |
연결 리스트 (linked list) |
⚡ O(1) (빠름) |
🔍 속도 비교 테스트
직접 비교해 보았습니다. 리스트와 deque의 맨 앞 삽입 속도를 측정해 보면?
from collections import deque
import time
# 큰 리스트 생성
size = 100_000
lst = list(range(size))
dq = deque(range(size))
# 리스트 삽입 속도
start = time.time()
lst.insert(0, -1)
end = time.time()
print(f"리스트 insert(0, -1) 수행 시간: {end - start:.6f}초")
# deque 삽입 속도
start = time.time()
dq.appendleft(-1)
end = time.time()
print(f"deque appendleft(-1) 수행 시간: {end - start:.6f}초")
결과적으로, deque의 삽입 속도가 리스트보다 훨씬 빠르다는 걸 확인할 수 있습니다. 💨
🤔 언제 deque를 써야 할까요?
이제 deque의 장점을 알았으니, 언제 사용하면 좋을지 정리해 볼게요.
✅ deque를 추천하는 경우:
- 리스트의 맨 앞에서 요소를 자주 추가하거나 삭제해야 할 때
- **큐(queue)**처럼 빠른 연산이 필요한 경우
🚫 리스트를 유지하는 경우:
- 주로 맨 뒤에서 요소를 추가/삭제할 때
- 임의 접근(예: list[i])이 자주 필요할 때 (deque는 인덱스 접근이 리스트보다 느립니다)
🎯 마무리
이 간단한 트릭 하나만 알아도, 코드의 효율성을 크게 높일 수 있습니다. 🚀
저는 deque를 발견한 뒤로 리스트의 단점을 보완하며 더 스마트하게 코드를 작성하고 있습니다. 😆
여러분도 다음 프로젝트에서 리스트 연산이 느리다고 느껴진다면, deque를 한 번 시도해 보세요. 후회하지 않을 겁니다!
함께보면 좋은글
Python 성능 향상: 3배 더 빠른 스크립트로 바꾸는 방법
Python 성능 향상: 3배 더 빠른 스크립트로 바꾸는 방법
Python 코드가 느려서 답답한 경험, 누구나 한 번쯤 있죠? 제가 사용한 주요 Python 성능 최적화 방법들을 공유하려고 합니다. 이 방법들을 통해 여러분도 Python 스크립트를 빠르게 만들 수 있을 것
intelloper.tistory.com
시니어 개발자들은 이런거 안한대요. (개발자 물경력 방지)
시니어 개발자들은 이런거 안한대요. (개발자 물경력 방지)
주니어 개발자에서 멈춰 있을수만은 없다! 연차는 쌓이는데 자신의 실력도 쌓여야겠죠? 시니어 개발자들은 어떻게 하는지 탐구해봅시다.모든 시니어 개발자도 처음에는 기초적인 코딩 실력과
intelloper.tistory.com
(Python 성능 향상) concurrent.futures 동시 프로그래밍 모듈로 속도 개선해보자!
(Python 성능 향상) concurrent.futures 동시 프로그래밍 모듈로 속도 개선해보자!
성능에 대해서는 프로그램을 만들고 나서나 기능 개발이 완료되고 나서나 작동이 잘되는것을 확인했는데 속도가 아쉽다면 항상 고민을 하게 됩니다.우리는 더 나은 품질에 빠릿빠릿한 프로그
intelloper.tistory.com