Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Module « builtins »

Fonction id - module builtins

Signature de la fonction id

 def id(an_instance) -> int

Description

Cette fonction calcule un identifiant unique associé à l'objet passé en paramètre, cette valeur pouvant être utilisée pour identifier ultérieurement l'objet. Cet identifiant unique est associé à l'instance dès sa construction. Deux objets distincts en mémoire auront forcément des identifiants différents. Dans le cas spécifique de CPython, cet identifiant correspond à l'adresse mémoire de l'objet (ce qui garantit forcément son unicité).

CPython est le nom de l'environnement Python de référence (celui qu'on télécharge sur le site officiel Python : http://python.org). Pour information, il existe d'autres implémentations d'environnement d'exécution Python : Jython, Iron Python, ...
>>> id("Une chaine de caractères")
140064686507600
>>> hex(id("Une chaine de caractères"))     # Affichage en hexadécimal.
'0x7f6359e28650'
>>>

L'identifiant d'un objet Python reste le même (il est constant) durant toute la vie de l'objet. Mais durant deux exécutions distinctes, ce que vous considérerez comme un même objet (une même donnée) aura des valeurs d'identifiants différentes, l'objet n'étant pas toujours instancié au même emplacement mémoire d'une exécution à l'autre.

id.__doc__

Return the identity of an object.

This is guaranteed to be unique among simultaneously existing objects.
(CPython uses the object's memory address.)

Paramètre

ParamètreDescription
 an_instance : object 
L'objet Python pour lequel calculer l'identifiant unique.

Valeur de retour

La valeur de retour est de type int.

Cette valeur de retour contient l'identifiant unique de l'object.

Exemple(s) de code

L'exemple suivant permet de prouver que, sauf avis contraire de votre part, un objet Python est passé d'une variable à une autre par référence. Si vous souhaitez dupliquer un objet, il faut explicitement de demander.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
msg_reference = "Deux variables qui référencent le même objet"
msg_copy = "Deux variables référençant chacune un objet distinct" 

print("--- 1er test ---")
original = [10, 20, 30, 40, 50]
copy_or_not = original
copy_or_not[2] = 3000
print(original)
print(copy_or_not)

id1 = id(original)
id2 = id(copy_or_not)
print(hex(id1), "-", hex(id2), "-", msg_reference if id1 == id2 else msg_copy)

print("--- 2nd test ---")
original = [10, 20, 30, 40, 50]
copy_or_not = list(original)    # Notez qu'on passe par le constructeur de la classe list
copy_or_not[2] = 3000
print(original)
print(copy_or_not)

id1 = id(original)
id2 = id(copy_or_not)
print(hex(id1), "-", hex(id2), "-", msg_reference if id1 == id2 else msg_copy)
Exemple d'utilisation de la fonction id.

Et voici les résultats produits par cet exemple.

$> python sample.py
--- 1er test ---
[10, 20, 3000, 40, 50]
[10, 20, 3000, 40, 50]
0x7f6dc247f400 - 0x7f6dc247f400 - Deux variables qui référencent le même objet
--- 2nd test ---
[10, 20, 30, 40, 50]
[10, 20, 3000, 40, 50]
0x7f6dc23bc100 - 0x7f6dc23bf580 - Deux variables référençant chacune un objet distinct
$> 

Voir aussi

La fonction hex