Maison >développement back-end >Tutoriel Python >Pourquoi plusieurs objets Python partagent-ils parfois le même identifiant ?

Pourquoi plusieurs objets Python partagent-ils parfois le même identifiant ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 20:12:39398parcourir

Why Do Multiple Python Objects Sometimes Share the Same ID?

Même ID pour plusieurs objets : le comportement bizarre de Python

En Python, créer plusieurs objets sans leur attribuer de nom peut en effet les amener à partager le même identifiant. Cet apparent paradoxe vient du fait que l'ID d'un objet n'est unique que pendant sa durée de vie.

Lorsque vous créez une variable qui fait référence à un objet, comme someClass(), la durée de vie de l'objet commence lorsque la variable est attribué et se termine lorsqu'il est hors de portée. Dans l'exemple que vous avez fourni :

print(someClass())
print(someClass())

Les deux appels someClass() génèrent deux objets, mais ils sont tous deux créés et détruits dans le même appel à print. Par conséquent, ils partagent la même durée de vie et peuvent avoir le même identifiant.

Ce comportement est encore accentué dans l'utilisation par Python 3.3.3 du comptage de références pour le garbage collection. Lorsque le nombre de références d'un objet atteint zéro (c'est-à-dire qu'aucune variable ne s'y réfère), il devient éligible à la suppression. Dans notre exemple, le deuxième appel à someClass() fait atteindre zéro le nombre de références du premier objet, le rendant éligible à une désallocation immédiate.

Puisque le prochain objet à allouer est placé dans le même emplacement mémoire en tant que premier objet, il se retrouve avec le même identifiant. Cela explique pourquoi l'appel de la même classe plusieurs fois de suite peut donner lieu à des objets avec le même ID.

Si vous avez besoin d'ID uniques pour les objets, vous pouvez surmonter ce problème en les attribuant explicitement à des variables et en les conservant. :

a = someClass()
b = someClass()
print(id(a))
print(id(b))

Ici, a et b font référence à des objets distincts avec des identifiants distincts, même s'ils appartiennent à la même classe. Alternativement, vous pouvez implémenter votre propre mécanisme d'identification spécifique à la classe pour garantir l'unicité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn