스택오버플로우 글을 참고했다.
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를 사용하도록 하자.