L' range
objets spéciaux:
Python comparer range
objets comme des Séquences. Ce que cela signifie essentiellement, c'est que la comparaison n'est pas d'évaluer la façon dont ils représentent une séquence donnée, mais plutôt ce qu'ils représentent.
Le fait que l' start
, stop
et step
paramètres sont complètement différents joue pas de différence ici, car ils représentent tous une liste vide, une fois dépliée:
Par exemple, la première range
objet:
list(range(0)) # []
et le second range
objet:
list(range(2, 2, 2)) # []
Les deux représentent une liste vide et depuis deux vide listes de comparer l'égalité (True
) ainsi que l' range
objets qui représentent eux.
Comme un résultat, vous pouvez avoir complètement différent à la recherche range
objets; si elles représentent la même séquence, ils vont comparer l'égalité:
range(1, 5, 100) == range(1, 30, 100)
Les deux représentent une liste avec un seul élément [1]
de sorte que ces deux permettra également de comparer l'égalité.
Non, range
des objets sont vraiment spécial:
Notez, cependant, que même si la comparaison n'est pas d'évaluer la façon dont ils représentent une séquence le résultat de la comparaison peut être réalisé en utilisant uniquement les valeurs de start
, step
avec l' len
de la range
objets; ce qui est très intéressant implications avec la vitesse de comparaisons:
r0 = range(1, 1000000)
r1 = range(1, 1000000)
l0 = list(r0)
l1 = list(r1)
Les plages compare super rapide:
%timeit r0 == r1
The slowest run took 28.82 times longer than the fastest. This could mean that an intermediate result is being cached
10000000 loops, best of 3: 160 ns per loop
d'autre part, les listes..
%timeit l0 == l1
10 loops, best of 3: 27.8 ms per loop
Ouais..
Comme @SuperBiasedMan de noter que cela ne s'applique à la gamme d'objets en Python 3. Python 2 range()
est une plaine ol' fonction qui retourne une liste, tandis que l' 2.x
xrange
objet n'est pas de la comparaison capabilies (et pas seulement ces..) qu' range
des objets ont en Python 3.
Regarde @ajcr de réponse pour des devis directement à partir du code source sur Python 3 range
objets. Il est documenté en ce que la comparaison entre les deux gammes différentes nécessite réellement: Simple rapide des opérations. L' range_equals
fonction est utilisé dans l' range_richcompare
fonction pour EQ
et NE
des cas et affectés à l' tp_richcompare
membre pour PyRange_Type
.