9 ms·
Compared to __slots__ (also Python 3.7.4) Using your definition of class X %timeit x.w() 313 ns ± 18.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 lo
by maksimum 7y ago
Compared to __slots__ (also Python 3.7.4)
Using your definition of class X
%timeit x.w()
313 ns ± 18.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Add __slots__
class X:
__slots__ = ('a')
def w(z):
a = z.a
return a+a+a+a+a
%timeit x.w()
271 ns ± 7.13 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
About 14% less time.
- kragen 7y agoYour computer is evidently faster than my phone; how fast was y() for you? Also you are missing a comma in your would-be tuple.
- Dylan16807 7y agoFor what it's worth I got about 196 and 131 for the original y and w, and after adding __slots__ (with comma) I got 186 and 123.
- kragen 7y agoThe fact that the difference is 10ms and 8ms respectively suggests that the speedup of attribute access isn't what's showing up in your measurements. In one case we access the slot "a" once; in the other case we access it five times. How can that be a 20% difference?