In the docs for heapq, its written that

heapq.heappushpop(heap, item)

Push item on the heap, then pop and return the smallest item from the heap. The combined action runs more efficiently than heappush() followed by a separate call to heappop().


Why is it more efficient? 
Also is it considerably more efficient ?
heappop is pop out the first element, then move the last element to fill the in the first place, then do a sinking operation, which moving the the element down through consecutive exchange. thus restore the head
it is O(logn)
then you headpush, place the element in the last place, and bubble-up 
like heappop but reverse
another O(logn) 
while heappushpop, pop out the first element, instead of moving the last element to the top, it place the new element in the top, then do a sinking motion. which is almost the same operation with heappop.
just one O(logn) 

as above even though they are both O(logn), it is easier to see heappushpop is faster than heappop then heappush.
How is heapq.heappushpop more efficient than heappop and heappush in python