Hello Armin, Thanks for the answer!
On Mon, Sep 28, 2015 at 8:17 PM, Armin Rigo <ar...@tunes.org> wrote: > > In addition to the other comments, this is not testing what you think > it is: 'range(100)' returns a list optimized for being a range, and > 'list(range(100))' does it too. You can see it like this: > >>>>> import __pypy__ >>>>> __pypy__.strategy([]) > 'EmptyListStrategy' >>>>> __pypy__.strategy(range(100)) > 'SimpleRangeListStrategy' >>>>> __pypy__.strategy(list(range(100))) > 'SimpleRangeListStrategy' > > The SimpleRangeListStrategy means that the list is implemented as just > a number, here 100. > >>>>> __pypy__.strategy(range(100)[:]) > 'IntegerListStrategy' > > So we discover here that slicing a range-list is not as optimized as > it could be. It expands it to an array containing all the integers. > That's the reason for why the slicing version seems slower in your > tests. But optimizing that would of course be pointless in almost any > real program. However, I still get "slice-way" twice as slow as "constructor-way" when I use normal lists: from timeit import timeit print timeit('b = a[:]', 'a = [1,2,3,4,5,6,7,8,9,0]') # 0.0329349040985 print timeit('b = list(a)', 'a = [1,2,3,4,5,6,7,8,9,0]') # 0.0171940326691 or: pypy -m timeit -s 'a = [1,2,3,4,5,6,7,8,9,0]' 'b = a[:]' # 0.0306 usec per loop pypy -m timeit -s 'a = [1,2,3,4,5,6,7,8,9,0]' 'b = list(a)' # 0.0149 usec per loop Please, let me rephrase my question: currently I use `[:]` because it is faster in CPython (0.131 usec vs 0.269 usec per loop). I almost don't mind changing it to `list()` because of PyPy but I was wondering what do PyPy developers recommend. I don't understand why is `[:]` twice as slow as `list()` as it seems it should do the same thing (create a list and copy the content). So my question is, is there a reason why `list()` is fundamentally faster, and then I would switch to it, or maybe/perhaps/somewhere-in-the-future PyPy would make it as fast as `[:]`, as it does the same amount of work, and then I could leave it as it is (`[:]`)? _______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev