On Thu, 15 Jan 2009 23:22:48 +0100, Christian Heimes wrote: >> is there anything that can be done to speed up this simply code? right >> now it is taking well over 15 minutes to process, on a 3 Ghz machine >> with lots of RAM (though this is all taking CPU power, not RAM at this >> point.) > > class MyClass(object): > # a new style class with slots saves some memory > __slots__ = ("field1", "field2", "field2")
I was curious whether using slots would speed up attribute access. >>> class Parrot(object): ... def __init__(self, a, b, c): ... self.a = a ... self.b = b ... self.c = c ... >>> class SlottedParrot(object): ... __slots__ = 'a', 'b', 'c' ... def __init__(self, a, b, c): ... self.a = a ... self.b = b ... self.c = c ... >>> >>> p = Parrot(23, "something", [1, 2, 3]) >>> sp = SlottedParrot(23, "something", [1, 2, 3]) >>> >>> from timeit import Timer >>> setup = "from __main__ import p, sp" >>> t1 = Timer('p.a, p.b, p.c', setup) >>> t2 = Timer('sp.a, sp.b, sp.c', setup) >>> min(t1.repeat()) 0.83308887481689453 >>> min(t2.repeat()) 0.62758088111877441 That's not a bad improvement. I knew that __slots__ was designed to reduce memory consumption, but I didn't realise they were faster as well. -- Steven -- http://mail.python.org/mailman/listinfo/python-list