La fonction id() de Python renvoie « l’identité » de l’objet. L’identité d’un objet est un entier, qui est garanti unique et constant pour cet objet pendant sa durée de vie. Deux objets avec des durées de vie ne se chevauchant pas peuvent avoir la même valeur id().
Dans l’implémentation CPython, il s’agit de l’adresse de l’objet en mémoire.
Python id()
Python met en cache la valeur id() de types de données couramment utilisés, tels que chaînes, entiers, tuples, etc. Ainsi, vous pourriez constater que plusieurs variables se réfèrent au même objet et ont la même valeur id() si leurs valeurs sont identiques. Vérifions cela avec un exemple.
# entiers
a = 10
b = 10
c = 11
d = 12
print(id(a))
print(id(b))
print(id(c))
print(id(d))
Sortie :
4317900064
4317900064
4317900096
4317900128
Remarquez que les valeurs id() de ‘a’ et ‘b’ sont identiques, car ils ont la même valeur entière. Voyons si nous obtenons un comportement similaire avec les chaînes et les tuples également.
# tuples
t = ('A', 'B')
print(id(t))
t1 = ('A', 'B')
print(id(t1))
# strings
s1 = 'ABC'
s2 = 'ABC'
print(id(s1))
print(id(s2))
Sortie :
4320130056
4320130056
4320080816
4320080816
À partir de la sortie, il est clair que Python met en cache les objets de type chaîne et tuple et les utilise pour économiser de l’espace mémoire.
La mise en cache ne fonctionne qu’avec des objets immuables, notez que les entiers, les chaînes et les tuples sont immuables. Ainsi, l’implémentation Python peut utiliser la mise en cache pour économiser de l’espace mémoire et améliorer les performances.
Nous savons que le dictionnaire n’est pas immuable, voyons si id() est différent pour différents dictionnaires même si les éléments sont les mêmes?
# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))
Sortie:
4519884624
4519884768
Comme nous le pensions, les objets dict retournent des valeurs id() différentes et il ne semble pas y avoir de mise en cache ici.
Python id() pour objet personnalisé
Voyons un exemple simple d’obtention de la valeur id() pour un objet personnalisé.
class Emp:
a = 0
e1 = Emp()
e2 = Emp()
print(id(e1))
print(id(e2))
Sortie:
4520251744
4520251856
Résumé
La valeur id() de Python est garantie d’être unique et constante pour un objet. Nous pouvons utiliser cela pour nous assurer que deux objets font référence au même objet en mémoire ou non.
Vous pouvez consulter le script Python complet et plus d’exemples Python depuis notre Dépôt GitHub.
Référence: Documentation officielle
Source:
https://www.digitalocean.com/community/tutorials/python-id