En répondant à une autre question j'ai suggéré d'utiliser timeit
pour tester la différence entre l'indexation d'une liste avec des entiers positifs et des entiers négatifs. Voici le code :
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)
J'ai exécuté ce code avec python 2.6 :
$ python2.6 test.py
0.587687015533
0.586369991302
Je l'ai ensuite exécuté avec python 3.2 :
$ python3.2 test.py
0.9212150573730469
1.0225799083709717
Puis je me suis gratté la tête, j'ai fait une petite recherche sur Google et j'ai décidé de poster ces observations ici.
Système d'exploitation : OS-X (10.5.8) -- Intel Core2Duo
Cela me semble être une différence assez importante (un facteur de plus de 1,5). Quelqu'un a-t-il une idée de la raison pour laquelle python3 est tellement plus lent, surtout pour une opération aussi courante ?
EDIT
J'ai exécuté le même code sur mon ordinateur de bureau Ubuntu Linux (Intel i7) et obtenu des résultats comparables avec python 2.6 et python 3.2. Il semble qu'il s'agisse d'un problème qui dépend du système d'exploitation (ou du processeur) (d'autres utilisateurs constatent le même comportement sur des machines Linux - voir les commentaires).
EDIT 2
La bannière de démarrage a été demandée dans l'une des réponses, alors voilà :
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
et :
Python 3.2 (r32:88452, Feb 20 2011, 10:19:59)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
UPDATE
Je viens d'installer des versions récentes de python2.7.3 et python3.2.3 à partir de http://www.python.org/download/
Dans les deux cas, j'ai pris le
"Python x.x.3 Mac OS X 32-bit i386/PPC Installer (pour Mac OS X 10.3 jusqu'à 10.6 [2])".
puisque je suis sur OS X 10.5. Voici les nouveaux temps (qui sont raisonnablement cohérents à travers plusieurs essais) :
python 2.7
$python2.7 test.py
0.577006101608
0.590042829514
python 3.2.3
$python3.2 test.py
0.8882801532745361
1.034242868423462