This is a curious exercise to understand the inner workings of heapq and why heapify is done.
Experiment 1
from heapq import heappush, heappop
data = [3,2,1]
# heappush(data,4)
heappop(data),heappop(data),heappop(data)#,heappop(data)
Output: (3, 1, 2).
What did heappop do to the list to make 1 and 2 swap positions? Which of the first two heappops did this?
Experiment 2 (pushing 1 element + popping 1 more)
data = [3,2,1]
heappush(data,4)
heappop(data),heappop(data),heappop(data),heappop(data)
Output: (3, 1, 2, 4)
Experiment 3 (change pushed element from 4 to 0)
data = [3,2,1]
heappush(data,0)
heappop(data),heappop(data),heappop(data),heappop(data)
Output:: (0, 1, 2, 3)
Why when pushing 4, the output seems similar to experiment 1 (Please compare mechanics of experiment 1 and experiment 2), but when pushing 0, the other 3 elements also changed positions?
It looks like pushing 0 instead of 4 turned the list into a real heap?
P.s I know heapify(data)
can turn experiment 3 output to (1, 2, 3, 4)
, making it work normally is not the point of the question.