[파이썬] priorityQueue, heapq의 차이점은 뭘까?

배코딩·2022년 1월 7일
0

note

목록 보기
15/110

스택오버플로우 글을 참고했다.

  • heapq에는 heappush와 heappop 메소드가 있다. 메소드 이름이 큐 스러운 이름이 아니라서, 다른 일반 큐들과 같이 사용하기 쉽도록 priorityQueue에서는 똑같은 메소드를 put, get이라는 이름으로 제공한다.

  • 그런데 heapq에 있는 메소드들이 모두 priorityQueue에서 사용할 수 있지는 않다. 가령 heappushpop(), heapreplace()같은 메소드들

  • 이처럼 heapq는 특정 목적에 맞게 전문화되어있으므로, 스레드로부터 안전하지 않고, priorityQueue는 안전하다. (기본 queue 클래스를 사용하고, 이 것은 스레드를 안전하게 만들기 위한 locking을 제공)

  • heapq에서 priorityQueue로 이월되지 않는 메소드들은 대체로 사용할 일이 적지만, 만약 현재 프로젝트에서 필요할 것 같으면 heapq를 사용하도록 하자.

  • priorityQueue는 클래스이므로 import한 뒤 따로 변수에 pq = priorityQueue()로 객체를 생성해준 뒤 메소드로 채우고 삭제하고 하면 된다. 반면 heapq는 모듈이라서, 내가 만든 어떤 리스트 arr에, heapq의 메소드들을 활용하여 채우고 삭제하고 지지고 볶고 하면 된다.

  • 코딩 테스트의 경우에는, priorityQueue보다 heapq가 속도가 더 빠르기 때문에, heapq를 사용하도록 하자.

profile
PS, 풀스택, 앱 개발, 각종 프로젝트 내용 정리 (https://github.com/minsu-cnu)

0개의 댓글