Hi everybody,

I recognized the following oddity (background story: http://srkunze.blogspot.com/2016/02/lets-go-down-rabbit-hole.html).

Python sometimes seems not to hop back and forth between C and Python code.

Can somebody explain this?


class MyList(list):
    count = 0
    def __setitem__(self, key, value):
        self.count += 1
        super(MyList, self).__setitem__(key, value)

# using heapq directly
from heapq import heappop
ml = MyList(range(10))
heappop(ml)                 # that's C
print(ml.count) # print 0


# using exact copy from heapq
from heapq import _siftup
def my_heappop(heap):
    lastelt = heap.pop()
    if heap:
        returnitem = heap[0]
        heap[0] = lastelt
        _siftup(heap, 0)    # that's C
        return returnitem
    return lastelt

ml = MyList(range(10))
my_heappop(ml)
print(ml.count) # print 6


Best,
Sven

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to