Maison >développement back-end >Tutoriel Python >Pourquoi les tuples, ensembles et listes vides partagent-ils le même identifiant dans CPython ?

Pourquoi les tuples, ensembles et listes vides partagent-ils le même identifiant dans CPython ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 05:55:02991parcourir

Why Do Empty Tuples, Sets, and Lists Share the Same ID in CPython?

Pourquoi l'ID des tuples, ensembles et listes vides reste le même dans CPython

Dans CPython, les tuples, ensembles et listes vides partagent de manière inattendue le même identifiant. Ceci est contraire au comportement des objets mutables, où chaque instance a un identifiant unique.

La raison de ce comportement réside dans l'allocateur de mémoire de CPython. Lorsque l'interpréteur Python crée un tuple ou une liste vide, il alloue un petit bloc de mémoire. La fonction id renvoie ensuite l'adresse de ce bloc mémoire, qui est la même pour tous les tuples ou listes vides.

Bien que les dictionnaires soient également mutables, leur comportement diffère car ils nécessitent plus de mémoire. Lors de la création d'un nouveau dictionnaire vide, un bloc mémoire unique est alloué et la fonction id renvoie l'adresse de ce bloc.

Pour illustrer ce concept, exécutons du code Python qui montre la cohérence des identifiants pour les tuples vides et lists :

<code class="python">tuple1 = ()
tuple2 = ()

id1 = id(tuple1)
id2 = id(tuple2)

print(id1 == id2)  # Output: True</code>

Cela démontre que plusieurs tuples vides ont le même identifiant, même s'il s'agit d'objets distincts.

De plus, l'ID d'un ensemble ou d'une liste vide reste le même même après en l'attribuant à une variable puis en appelant id(). En effet, l'objet vide initial est toujours vivant et a le même emplacement mémoire.

En résumé, l'ID d'un objet dans CPython n'est unique que pour la durée de vie de l'objet. Une fois l'objet détruit, le même bloc mémoire peut être réutilisé pour un objet différent, ce qui entraîne des identifiants en double.

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