<div class="gmail_quote">On Tue, Aug 23, 2011 at 12:26 PM, Peter Otten <span dir="ltr"><__<a href="mailto:peter__@web.de">peter__@web.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">Jack wrote:<br>
<br>
> People have illusion that it is faster to visit the attribute defined<br>
> by __slots__ .<br>
> <a href="http://groups.google.com/group/comp.lang.python/msg/c4e413c3d86d80be" target="_blank">http://groups.google.com/group/comp.lang.python/msg/c4e413c3d86d80be</a><br>
><br>
> That is wrong. The following tests show it is slower.<br>
<br>
</div>Not so fast. Here's what I get (python2.6.4, 64 bit):<br>
<br>
$ python  -mtimeit -s "class A(object): __slots__ = ('a', 'b', 'c')" -s<br>
<div class="im">"inst = A()" "inst.a=5; inst.b=6; inst.c=7"<br>
</div>1000000 loops, best of 3: 0.324 usec per loop<br>
<br>
$ python  -mtimeit -s "class A(object): pass" -s "inst = A()" "inst.a=5;<br>
<div class="im">inst.b=6; inst.c=7"<br>
</div>1000000 loops, best of 3: 0.393 usec per loop<br>
<br>
Now what?<br>
<div><div></div><div class="h5"><br>
--<br>
<a href="http://mail.python.org/mailman/listinfo/python-list" target="_blank">http://mail.python.org/mailman/listinfo/python-list</a><br>
</div></div></blockquote></div><br>This is what I get on a 64 bit Linux 2.6.39<br>
<br>
script:<br>
for v in 2.6 2.7 3.2; do<br>
  python$v --version<br>
  echo -n "(slots)   = ";<br>
  python$v -mtimeit -s "class A(object): __slots__ = ('a', 'b', 'c')" -s "inst = A()" "inst.a=5; inst.b=6; inst.c=7";<br>
  echo -n "(regular) = ";<br>
  python$v -mtimeit -s "class A(object): pass" -s "inst = A()" "inst.a=5; inst.b=6; inst.c=7";<br>
done<br>
<br>
output:<br>
Python 2.6.5<br>
(slots)   = 1000000 loops, best of 3: 0.219 usec per loop<br>
(regular) = 1000000 loops, best of 3: 0.231 usec per loop<br>
Python 2.7.2<br>
(slots)   = 1000000 loops, best of 3: 0.244 usec per loop<br>
(regular) = 1000000 loops, best of 3: 0.285 usec per loop<br>
Python 3.2<br>
(slots)   = 1000000 loops, best of 3: 0.193 usec per loop<br>
(regular) = 1000000 loops, best of 3: 0.224 usec per loop<br><br>
-- John-John Tedro