Pourquoi les tuples, dictionnaires et listes vides partagent-ils des adresses mémoire dans CPython, et pourquoi cela n'est-il pas lié à la mutabilité ?

Patricia Arquette
Libérer: 2024-10-31 09:51:29
original
589 Les gens l'ont consulté

Why do empty tuples, dictionaries, and lists share memory addresses in CPython, and why is this not related to mutability?

Pourquoi les tuples, dictionnaires et listes vides partagent-ils des adresses mémoire dans CPython ?

Dans CPython, les conteneurs vides (tuples, dictionnaires et listes) présentent un comportement particulier concernant leurs identifiants d’objet. Plus précisément, les tuples vides, tels que (), et les dictionnaires vides, tels que {}, ont la même adresse mémoire, et les listes vides, telles que [], partagent également une adresse commune.

Explication

Lorsque id({}) ou id([]) est appelé dans CPython, un conteneur temporaire est créé et transmis à la fonction id. Cependant, avant que la fonction ne traite ce conteneur temporaire, son adresse mémoire est enregistrée et transmise. Le conteneur temporaire est ensuite supprimé, ne laissant que son adresse mémoire.

Par la suite, lorsqu'un autre appel à id({}) ou id([]) est effectué avant la création d'autres conteneurs, la même adresse mémoire est susceptible d'être affecté au nouveau conteneur temporaire. L'allocateur de mémoire de CPython alloue souvent des blocs de mémoire de manière consécutive, ce qui rend ce scénario très probable.

Étant donné que la fonction 'id' s'appuie sur des adresses mémoire pour l'identification des objets, il s'ensuit que id({}) == id({}) et id([]) == id([]) sont vrais. Ce comportement ne se produit que pendant l'existence temporaire de ces conteneurs vides et n'indique pas que les conteneurs partagent des propriétés inhérentes.

Distinction avec la mutabilité

La mutabilité n'est pas une conséquence directe facteur dans ce phénomène. Cependant, il est crucial de noter que les objets mutables, tels que les listes, ne peuvent pas être mis en cache ou réutilisés comme les objets immuables, tels que les tuples et les chaînes. Par conséquent, id(x) != id(y) pour deux objets mutables distincts, même s'ils contiennent des éléments identiques.

Signification

L'ID d'un objet est uniquement unique pour sa durée de vie. Après la destruction d'un objet ou avant sa création, un autre objet peut acquérir le même identifiant.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal