Python Collections Deque
Table of Contents
Python 2.4부터 탑재된 collections
의 deque
에 대해 알아보도록 하겠습니다.
Deque
deque는
deck
라고 읽으며double-ended queue
의 줄임말로 양방향으로append
와pop
이 가능한 큐입니다. deque는thread-safe
하며 어떠한 방향으로append
나pop
을 해도 시간 복잡도가O(1)
입니다.
1 | from collections import deque |
Methods
deque
는 list
에 있는 append
, clear
, count
, extend
, remove
, reverse
함수를 가지고 있고, 추가로 appendleft
, popleft
, extendleft
, 와 rotate
함수를 가지고 있습니다. 여기서는 deque
에만 있는 함수들만 알아보도록 하겠습니다.
appendleft(x)
appendleft
는 왼쪽 첫 번째 인자를 추가하는 메소드입니다.
1 | from collections import deque |
1 | from collections import deque |
extendleft(iterable)
extend
는 append
와 다르게 인수의 배열을 한 차원 낮추어 추가합니다.
1 | from collections import deque |
1 | from collections import deque |
popleft()
popleft
는 왼쪽 첫 번째 인자를 제거하고 반환하는 메소드입니다.
1 | from collections import deque |
rotate(n=1)
rotate(n)
는 n
만큼 큐를 회전시키며 기본적으로 n=1
입니다. 양수일 때 오른쪽으로 회전시키고 음수일 때 왼쪽으로 회전합니다.
1 | from collections import deque |
Performance
list
를 이용하여 큐를 구현할 수 있지만 deque
를 사용하는 이유 중 하나는 성능입니다. list.pop(0)
와 deque.popleft()
의 실행 시간을 timeit
을 이용하여 측정해보겠습니다. timeit
에 대한 자세한 설명은 포스팅을 참고해주세요
1 | setup = """ |
1 | setup = """ |
list.pop(0)
의 경우 O(N)
의 시간복잡도를 가지지만 deque.popleft()
는 O(1)
로 매우 빠릅니다.