__delitem__ affecting performance

K

Karl H.

Hi,

I was performing some timing tests on a class that inherits from the
built-in list, and got some curious results:

import timeit

class MyList(list):
def __init__(self):
list.__init__(self)
self[:] = [0,0,0]

def __delitem__(self,index):
print 'deleting'

ml = MyList()

def test():
global ml
ml[0] += 0
ml[1] += 0
ml[2] += 0

t = timeit.Timer("test()","from __main__ import test")
print t.timeit()

import timeit

class MyList(list):
def __init__(self):
list.__init__(self)
self[:] = [0,0,0]

ml = MyList()

def test():
global ml
ml[0] += 0
ml[1] += 0
ml[2] += 0

t = timeit.Timer("test()","from __main__ import test")
print t.timeit()

Does anybody know why defining __delitem__ is causing the code to run
slower? It is not being called, so I don't see why it would affect
performance. Overriding other sequence operators like __delslice__ does
not exhibit this behavior.

The speed difference doesn't really bother me, but I am curious.

I used Python 2.4 for this test.

-Karl
 
F

Fredrik Lundh

Karl said:
Does anybody know why defining __delitem__ is causing the code to run
slower? It is not being called, so I don't see why it would affect
performance.

probably because overriding portions of the internal sequence slot API
(tp_as_sequence) means that Python needs to do full dispatch for all
members of that API, instead of keeping things at the C level.

</F>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top