반응형
deque
"double-ended queue"의 약자
양쪽 끝에서 데이터를 추가하거나 제거할 수 있는 자료구조
일반 큐(queue)와 달리, deque는 앞과 뒤 양쪽에서 삽입 및 삭제가 가능하여 보다 유연한 데이터 처리가 가능
사용법
from collections import deque
d = deque([1, 2, 3])
d.append(4) # 오른쪽에 데이터 추가
d.appendleft(0) # 왼쪽에 데이터 추가
print(d) # deque([0, 1, 2, 3, 4])
d.pop() # 오른쪽에서 데이터 제거
d.popleft() # 왼쪽에서 데이터 제거
deque / list / queue
- 리스트 (list): 일반적인 데이터 저장용으로 사용, 뒤쪽 삽입/삭제는 빠르지만 앞쪽 작업은 느림.
- 데크 (deque): 양쪽 끝에서의 삽입/삭제가 모두 빠르며, 큐나 스택 등 다양한 방식으로 활용 가능.
- 큐 (queue.Queue): 멀티스레드 환경에서 안전한 데이터 교환을 위해 설계되었으며, 주로 FIFO 방식의 블로킹 큐로 사용.
데크 (deque, collections.deque)
- 용도: 양쪽 끝에서의 빠른 삽입과 삭제가 필요할 때 적합
- 성능: 양쪽 끝 작업: append(), appendleft(), pop(), popleft() 모두 O(1)의 시간 복잡도를 갖음
- 특징: 리스트보다 앞쪽에서의 연산이 효율적이며, 내부적으로 연결 리스트와 비슷한 구조를 사용.
스레드 안전(thread-safe)이 필요하지 않은 경우에 주로 사용
리스트 (list)
- 뒤쪽 작업: append()와 pop() (마지막 요소 제거)는 평균적으로 O(1)의 시간 복잡도를 가짐
- 앞쪽 작업: insert(0, value) 또는 pop(0)은 모든 요소를 이동해야 하므로 O(n)의 시간 복잡도를 가짐
- 특징: 메모리 연속 공간에 저장되어 있어 인덱싱이나 슬라이싱에 유리
큐 (queue.Queue)
- 용도: 주로 멀티스레드 환경에서 안전하게 데이터를 주고받기 위한 용도로 사용
- 성능 및 특징: 스레드 안전: 내부적으로 락(lock)을 사용하여 스레드 간의 동시 접근을 안전하게 처리
- 연산: 기본적으로 FIFO(선입선출) 방식을 따르며, put()과 get() 메서드를 사용
Blocking operation(데이터가 없으면 대기 등) 기능이 있어 스레드 간 통신에 유리
양방향 지원: 기본적으로 큐는 한쪽 끝에서 삽입, 다른 쪽 끝에서 삭제하는 구조이므로, deque처럼 양쪽 끝에서 자유로운 삽입/삭제를 지원하지는 않음
반응형
'Python' 카테고리의 다른 글
[Python] logging.handlers - TimedRotatingFileHandler (0) | 2025.04.09 |
---|---|
[Python] Meta classes 메타 클레스 란? (펌 / 링크) (0) | 2024.11.22 |
[python] vscode 들여쓰기 (0) | 2024.07.09 |
[Python] 나만 몰랐던 python 문법 (0) | 2024.02.07 |
[Python] SQLAlchemy joinedload (feat. 중복 불러오기 방지) (0) | 2024.01.19 |