Эффективность индексации списка (Python 2 против Python 3)

Отвечая на другой вопрос , я предложил использовать timeitдля проверки разницы между индексированием списка с положительными целыми числами и отрицательными целыми числами. Вот код:

import timeit
t=timeit.timeit('mylist[99]',setup='mylist=list(range(100))',number=10000000)
print (t)
t=timeit.timeit('mylist[-1]',setup='mylist=list(range(100))',number=10000000)
print (t)

Я запустил этот код с Python 2.6:

$ python2.6 test.py
0.587687015533
0.586369991302

Затем я запустил его с помощью Python 3.2 :

$ python3.2 test.py
0.9212150573730469
1.0225799083709717

. Потом я почесал голову, немного поискал в гугле и решил опубликовать эти наблюдения здесь.

Операционная система :ОС -X (10.5.8)--Intel Core2Duo

Это кажется мне довольно существенной разницей (— разница более чем в 1,5 раза ). Кто-нибудь знает, почему python3 настолько медленнее --, особенно для такой общей операции?

РЕДАКТИРОВАТЬ

Я запускал тот же код на моем рабочем столе Ubuntu Linux (Intel i7 )и добился сравнимых результатов с python2.6 и python 3.2. Похоже, что это проблема, которая зависит от операционной системы (или процессора )(Другие пользователи наблюдают такое же поведение на компьютерах с Linux --См. комментарии ).

РЕДАКТИРОВАТЬ 2

Баннер запуска был запрошен в одном из ответов,вот так:

Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin

и:

Python 3.2 (r32:88452, Feb 20 2011, 10:19:59) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin

ОБНОВЛЕНИЕ

Я только что установил свежие версии python2.7.3 и python3.2.3 из http://www.python.org/download/

. В обоих случаях я взял

"Python x.x.3 Mac OS X 32-bit i386/PPC Installer (for Mac OS X 10.3 through 10.6 [2])"

так как я на OS X 10.5. Вот новые тайминги (, которые достаточно стабильны в результате многочисленных испытаний):

питон 2.7

$python2.7 test.py
0.577006101608
0.590042829514

питон 3.2.3

$python3.2 test.py
0.8882801532745361
1.034242868423462

27
задан Community 23 May 2017 в 10:27
поделиться