List vs Deque

python에서 데이터를 순서대로 저장하기 위해 자주 활용되는 자료구조 2가지이다. list와 deque가 가지는 차이점은 뭘까?

List

list는 아래와 같이 고정된 크기의 메모리 형태로 할당된다. 값을 추가하고 삭제 할때 메모리를 반환과정 및 데이터 이동되는데 소요되는 시간이 존재한다.

python_list

insert/pop(0)

arr=range(10**5)
collection=[]

start=time.time()
for data in arr:
    collection.insert(0,data)
print("list insertion {}s".format(time.time()-start))

start=time.time()
for data in arr:
    collection.pop(0)
print("list pop(0) {}s".format(time.time()-start))

append/pop()

def append_pop_list():
    arr=range(10**5)
    collection=[]

    start=time.time()
    for data in arr:
        collection.append(data)
    print("list append {}s".format(time.time()-start))

    start=time.time()
    for data in arr:
        collection.pop()
    print("list pop {}s".format(time.time()-start))

Results

list append 0.0030024051666259766s
list pop(0) 9.884008407592773s
list insertion 0.977168083190918s
list pop 0.0029997825622558594s

Deque

Deque는 Double-Ended Queue의 약어로, 이중 연결리스트로 구성된다.

python_deque

appendleft/popleft()

arr=range(10**5)
collection=deque()

start=time.time()
for data in arr:
    collection.appendleft(data)
print("deque appendleft {}s".format(time.time()-start))

start=time.time()
for data in arr:
    collection.popleft()
print("deque popleft {}s".format(time.time()-start))

append/pop()

arr=range(10**5)
collection=deque()

start=time.time()
for data in arr:
    collection.append(data)
print("deque append {}s".format(time.time()-start))

start=time.time()
for data in arr:
    collection.pop()
print("deque pop {}s".format(time.time()-start))

Results

deque insertion 0.0030434131622314453s
deque popleft 0.0029594898223876953s
deque append 0.0049991607666015625s
deque pop 0.00400090217590332s

성능 비교

list deque  
왼쪽에 데이터 추가 0.003 0.003
오른쪽에 데이터 추가 0.977 0.004
왼쪽에서 데이터 추출 9.884 0.002
오른쪽에서 데이터 추출 0.002 0.004

위의 결과를 보면 양쪽 끝에서 데이터의 삽입/삭제가 빈번하게 발생하는 경우에 대해서는 deque를 활용하는 것이 더 효율적임을 알 수 있다.

댓글남기기