Qu'est-ce que la fonction id en Python ?

En Python, chaque objet, que ce soit un nombre, une liste, une instance de classe, possède une "identité" unique durant son cycle de vie.

Pour connaître l'identité d'un objet, il est possible d'utiliser la fonction id qui retourne l'identité d'un objet sous forme d'entier.

L'id correspond à l'adresse mémoire de cet objet.

Syntaxe

La syntaxe de id est simple :

id(objet)
PYTHON

Prenons un exemple simple :

a = 100000
print(id(a))
PYTHON

Identité vs égalité

La fonction id permet de comprendre la différence entre les opérateurs is et == :

  • L'opérateur == compare les valeurs des objets

  • L'opérateur is compare leurs identités. a is b est une façon raccourcie de faire id(a) == id(b)

liste_a = [1, 2, 3]
liste_b = [1, 2, 3]

# '==' compare les valeurs -> True
print(f"liste_a == liste_b: {liste_a == liste_b}")

# 'is' compare si ce sont les mêmes objets en mémoire -> False
print(f"liste_a is liste_b: {liste_a is liste_b}")
PYTHON
Un instant

id avec les objets immuables

Pour des raisons d'optimisation, Python peut réutiliser des objets immuables en évitant d'en créer de nouveaux. Le cas des petits entiers (de -5 à 256 en général) est le plus connu :

x = 250
y = 250

print(f"x is y: {x is y}")  # True
print(f"id(x): {id(x)}")
print(f"id(y): {id(y)}") # L'ID est le même
PYTHON
Un instant

Pour les plus grands nombres, le comportement dépend du contexte d'exécution :

a = 1000
b = 1000

print(f"a is b: {a is b}")      # Souvent True dans un script, False en interactif
print(f"id(a): {id(a)}")
print(f"id(b): {id(b)}")
PYTHON
Un instant

Lorsque vous exécutez le script ci-dessus avec VS Code, par un mécanisme d'optimisation, a et b seront le même objet. En revanche, dans un shell Python, nous aurons deux objets différents en mémoire.

Cela s'explique par le fait que dans un script, Python peut lire l'intégralité du script avant son exécution et réaliser des opérations d'optimisation avant d'exécuter le script.

Dans un shell interactif, cette opération n'est pas possible car chaque ligne est évaluée au fur et à mesure. L'interpréteur Python ne peut donc pas deviner par avance les optimisations nécessaires.

Exemple avec VS Code

Exemple avec VS Code

Exemple avec un shell Python

Exemple avec un shell Python

id avec les objets muables

Pour les objets muables comme les listes ou les dictionnaires, une nouvelle instance est créée à chaque fois, même en cas de contenu identique.

L'id ne change pas tant que l'objet n'est pas réassigné et modifier l'objet ne change pas son identité :

ma_liste = [10, 20]
print(f"ID initial : {id(ma_liste)}")

# On modifie la liste en place
ma_liste.append(30)
print(f"ID après append : {id(ma_liste)}") # L'ID est identique

# L'id est différent, même si le même nom est utilisé, car nous faisons une assignation
# On ne modifie donc pas l'objet directement comme avec append, on en crée un nouveau
ma_liste = [10, 20, 30]
print(f"ID après réassignation : {id(ma_liste)}") # L'ID est différent
PYTHON
Un instant

id est souvent utilisé pour le débogage et permet de mieux comprendre les concepts de mutabilité/immutabilité et la différence entre is et ==.

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.