Différence entre is et == en python

Pour voir la différence entre is et == en python nous allons prendre l'exemple de deux listes :

In [ ]:
liste1 = [1,2,3]
liste2 = [1,2,3]

Si on teste l'égalité entre liste1 et liste2 à l'aide de == on va écrire:

In [2]:
liste1 = [1,2,3]
liste2 = [1,2,3]

liste1 == liste2
Out[2]:
True

On voit ici qu'en exécutant le code on obtient True

Maintenant testons l'égalité avec is :

In [3]:
liste1 = [1,2,3]
liste2 = [1,2,3]

liste1 is liste2
Out[3]:
False

On voit ici qu'en executant le code on obtient False

Pourquoi dans un cas on obtient True et dans l'autre cas False ? C'est simple == va comparer les valeurs de liste1 et de liste2 alors que is va regarder si les deux listes sont enregistrées au même endroit en mémoire. is et == ne vérifient donc pas la même chose !

Pour bien voir que les deux listes ne sont pas enregistrées au même endroit en mémoire on va utiliser la fonction id qui nous donne l'adresse en mémoire :

In [5]:
liste1 = [1,2,3]
liste2 = [1,2,3]

print(id(liste1))
print(id(liste2))
93271336
93266312

Quand on execute le code on voit donc bien que liste1 et liste2 n'ont pas la même adresse en memoire