Esto es así porque Python asigna la misma dirección de memoria a las variables, cuando los valores están dentro de este rango (ver referencia 1), y el operador "is" no compara el contenido, sino la dirección de memoria, que es más eficiente.
Es decir, Python asigna el mismo id de memoria a todas las variables cuyo valor sea igual a 1, y asignará otro id de memoria para todas las variables cuyo valor sea igual a 2, y así hará lo mismo para los valores desde -5 hasta 256. Esto lo podemos comprobar si creamos las variablaes var1=1 y var2=1, y luego imprimimos los ids usando id(var1) y id(var2).
Por tal razón siempre será mas eficiente, en terminos de tiempo de ejecucion, usar el operador is, cuando los valores esten dentro del rango descrito.
python script:
import time def equals_op(n, cons): a, b = cons, cons for i in range(n): if a == b: pass def is_op(n, cons): a, b = cons, cons for i in range(n, cons): if a is b: pass if __name__ == "__main__": n, cons = 256, 900000000 start = time.time() equals_op(n, cons) print('== operator: ', time.time()-start) start = time.time() is_op(n, cons) print('IS operator: ', time.time()-start) # Resultados: Tiempo ejecucion en segundos # == operator: 45.07060742378235 # IS operator: 39.38887023925781
Referencia
1. https://docs.python.org/3/c-api/long.html
1. https://docs.python.org/3/c-api/long.html
No hay comentarios:
Publicar un comentario