lunes, 15 de junio de 2020

Comparar variables (is Vs ==)

Para evaluar si dos variables (var1 y var2) tienen el mismo contenido, se utiliza var1 == var2. Pero si el contenido de esas variables está en el rango desde -5 hasta 256, puede usarse var1 is var2 que es mas eficiente.

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)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















No hay comentarios:

Publicar un comentario