Maison >développement back-end >Tutoriel Python >Pourquoi les instances de classe Python consécutives et sans nom partagent-elles le même ID d'objet ?

Pourquoi les instances de classe Python consécutives et sans nom partagent-elles le même ID d'objet ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-18 13:46:11810parcourir

Why Do Consecutive, Unnamed Python Class Instances Share the Same Object ID?

Même ID d'objet pour les instances de classe conséquentes

Lors de la création de plusieurs instances d'une classe sans leur attribuer de nom, Python attribue le même ID à tous. Ce comportement, qui peut surprendre à première vue, est dû à la notion de durée de vie des objets en Python.

L'ID d'un objet assure son unicité uniquement pendant la durée de vie de l'objet. Dans l'exemple fourni, someClass() est appelée plusieurs fois dans le cadre d'une seule instruction. Chaque appel crée un nouvel objet. Cependant, comme ces objets ne sont affectés à aucune variable et que leur portée se termine immédiatement après la fin de l'exécution de l'instruction, ils deviennent disponibles pour le garbage collection.

Dans CPython, l'implémentation par défaut de Python, le garbage collection utilise le comptage de références. De plus, l'ID d'un objet est lié à son emplacement mémoire. Cette combinaison de facteurs explique pourquoi les instances conséquentes de someClass() partagent le même ID : la mémoire est désallouée et réutilisée à mesure que de nouveaux objets sont créés dans la même portée de fonction.

Pour résoudre ce problème et garantir des ID distincts pour la classe Dans certains cas, envisagez soit de conserver les objets dans une structure de données, soit d'implémenter un schéma d'identification personnalisé au sein de la classe.

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