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

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

DDD
Libérer: 2024-12-15 03:12:14
original
371 Les gens l'ont consulté

Why Do Multiple Unnamed Python Objects Sometimes Share the Same ID?

Identité d'objet en Python : pourquoi plusieurs objets sans nom partagent le même ID

Lors de la création de plusieurs objets d'une classe donnée en Python, on peut attendez-vous à ce que chaque instance possède une identité (ID) unique. Cependant, dans certaines circonstances, les créations successives d'objets sans nom peuvent avoir pour résultat qu'ils aient le même ID.

Comprendre la durée de vie et l'ID d'un objet

L'ID d'un objet représente son emplacement unique dans la mémoire. Cependant, cet ID est garanti unique uniquement pendant la durée de vie de l'objet, et non pendant l'exécution du programme.

Dans l'exemple fourni, vous créez deux instances sans nom de la classe someClass à l'aide de print :

print(someClass())
print(someClass())
Copier après la connexion

Une fois l'impression renvoyée, les objets créés ne sont plus référencés par aucune variable et sont éligibles au garbage collection. Dans l'implémentation CPython de Python, ils sont effectivement libérés immédiatement.

Détails de l'implémentation CPython

Le garbage collection de Python s'effectue via le comptage de références. De plus, l'ID d'un objet est lié à son emplacement mémoire. Lorsque le premier objet sans nom est libéré, l'emplacement mémoire qu'il occupait devient disponible.

Par conséquent, le prochain objet créé est placé dans le même emplacement mémoire, ce qui entraîne l'attribution du même ID aux deux objets.

Solution

Pour garantir des identifiants distincts pour les objets, envisagez de conserver les références à ceux-ci dans une liste ou d'implémenter un identifiant spécifique à la classe. ID qui offre des garanties appropriées, telles que :

class SomeClass:
    next_id = 0

    def __init__(self):
         self.id = SomeClass.nextid
         SomeClass.nextid += 1
Copier après la connexion

En implémentant votre propre générateur d'ID, vous pouvez créer des identifiants uniques pour chaque objet, quelle que soit sa durée de vie.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal