Opérateurs d'identité Python : Comprendre 'is' et 'is not'

Bienvenue, futurs programmeurs Python ! Aujourd'hui, nous allons plonger dans un aspect fascinant de Python : les opérateurs d'identité. Ne vous inquiétez pas si vous êtes nouveau dans la programmation ; je vais vous guider à travers ce concept étape par étape, tout comme j'ai fait pour d'innombrables étudiants au fil des années. Alors, prenez un verre de votre boisson préférée, et partons ensemble dans cette aventure passionnante !

Python - Identity Operators

Qu'est-ce qu'un opérateur d'identité Python ?

Avant de plonger dans les détails, comprenons ce qu'entendent les opérateurs d'identité. En Python, les opérateurs d'identité sont utilisés pour comparer les emplacements mémoire de deux objets. Ils ne comparent pas les valeurs des objets, mais vérifient plutôt si les objets sont effectivement le même objet en mémoire.

Pensez-y ainsi : imaginez que vous et votre ami avez tous deux des vélos rouges. Ils pourraient sembler identiques, mais ce ne sont pas les mêmes vélos. C'est le genre de distinction que les opérateurs d'identité nous aident à faire en Python.

Python a deux opérateurs d'identité :

Opérateur Description
is Retourne True si les deux opérandes se réfèrent au même objet
is not Retourne True si les deux opérandes ne se réfèrent pas au même objet

Maintenant, examinons chaque uno de ces opérateurs en détail.

L'opérateur Python 'is'

L'opérateur 'is' vérifie si deux objets ont la même identité, ce qui signifie qu'ils occupent le même emplacement mémoire. Il retourne True si les objets sont identiques, et False sinon.

Voici quelques exemples :

# Exemple 1 : Comparaison d'entiers
a = 5
b = 5
print(a is b)  # Sortie : True

# Exemple 2 : Comparaison de listes
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 is list2)  # Sortie : False

# Exemple 3 : Comparaison avec None
x = None
print(x is None)  # Sortie : True

Analysons ces exemples :

  1. Dans le premier exemple, 'a' et 'b' ont tous deux la valeur 5. Python optimise la mémoire en faisant partager les petits entiers (généralement de -5 à 256) le même emplacement mémoire. Donc, 'a' et 'b' se réfèrent en réalité au même objet en mémoire, ce qui rend 'a is b' True.

  2. Dans le second exemple, même si list1 et list2 contiennent les mêmes valeurs, ils sont deux objets distincts en mémoire. C'est pourquoi 'list1 is list2' retourne False.

  3. Dans le troisième exemple, 'None' est un objet singleton spécial en Python. Toute variable affectée à None se référera toujours à cet objet, donc 'x is None' retourne True.

L'opérateur Python 'is not'

L'opérateur 'is not' est simplement la négation de l'opérateur 'is'. Il retourne True si les objets ne sont pas le même objet en mémoire, et False s'ils le sont.

Voici quelques exemples :

# Exemple 1 : Comparaison de chaînes
str1 = "Bonjour"
str2 = "Bonjour"
print(str1 is not str2)  # Sortie : False

# Exemple 2 : Comparaison de listes à nouveau
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 is not list2)  # Sortie : True

# Exemple 3 : Comparaison avec None
y = 10
print(y is not None)  # Sortie : True

Analysons ces exemples :

  1. Dans le premier exemple, Python optimise la mémoire pour les petites chaînes, rendant str1 et str2 référents au même objet. Par conséquent, 'str1 is not str2' retourne False.

  2. Dans le second exemple, comme nous l'avons vu plus tôt, list1 et list2 sont des objets séparés en mémoire, donc 'list1 is not list2' retourne True.

  3. Dans le troisième exemple, y est affecté à la valeur 10, ce qui n'est pas None. Par conséquent, 'y is not None' retourne True.

Exemples pratiques avec explications des opérateurs d'identité Python

Maintenant que nous avons couvert les bases, examinons quelques exemples plus pratiques pour solider notre compréhension.

# Exemple 1 : Fonction renvoyant None
def saluer(name=None):
if name is not None:
return f"Bonjour, {name} !"
else:
return "Bonjour, étranger !"

print(saluer())  # Sortie : Bonjour, étranger !
print(saluer("Alice"))  # Sortie : Bonjour, Alice !

# Exemple 2 : Vérification de collections vides
empty_list = []
if empty_list is not None and len(empty_list) == 0:
print("La liste est vide mais pas None")

# Exemple 3 : Comparaison d'objets
class Personne:
def __init__(self, name):
self.name = name

person1 = Personne("Bob")
person2 = Personne("Bob")
person3 = person1

print(person1 is person2)  # Sortie : False
print(person1 is person3)  # Sortie : True

Analysons ces exemples :

  1. Dans le premier exemple, nous utilisons 'is not None' pour vérifier si un nom a été fourni à notre fonction saluer. C'est un motif commun en Python pour gérer les paramètres optionnels.

  2. Le second exemple montre comment nous pouvons utiliser 'is not None' en combinaison avec d'autres vérifications. Ici, nous nous assurons que notre liste existe (n'est pas None) et est vide.

  3. Le troisième exemple montre comment 'is' se comporte avec des objets personnalisés. Même si person1 et person2 ont le même nom, ils sont des objets différents en mémoire. Cependant, person3 est affecté au même objet que person1, donc 'person1 is person3' retourne True.

Conclusion

Et voilà, mes amis ! Nous avons exploré la terre des opérateurs d'identité Python. Rappelez-vous, 'is' et 'is not' sont liés à l'identité, pas à l'égalité. Ils vérifient si les objets sont exactement le même objet en mémoire, pas si ils ont la même valeur.

Au fil des années, j'ai trouvé que les étudiants confondent souvent 'is' avec '=='. Voici un petit couplet que j'utilise pour me souvenir : "Is est pour l'identité, égal égal pour l'égalité !"

Pratiquez avec ces opérateurs, jouez avec différents exemples, et bientôt vous les utiliserez comme un pro. Bon codage, et souvenez-vous : en Python, comme dans la vie, ce n'est pas seulement ce que quelque chose est, mais où il est qui compte !

Credits: Image by storyset