Press "Enter" to skip to content

Les clés du dictionnaire sont-elles immuables ?

L'implémentation de la table de hachage des dictionnaires utilise une valeur de hachage calculée à partir de la valeur de la clé pour trouver la clé. Si la clé était un objet mutable, sa valeur pourrait changer, et donc son hachage pourrait également changer. Les tuples sont immuables et peuvent donc être utilisés comme clés de dictionnaire.

Q. Pouvez-vous utiliser une structure de données mutable comme clé dans les dictionnaires ?

Il n'est pas interdit de créer un type mutable qui est hachable, mais il peut ne pas se comporter comme vous le souhaitez. L'exigence est que le hachage d'un objet ne change pas au fil du temps et qu'il continue de comparer égal (==) avec sa valeur d'origine. Votre classe A répond à ces deux exigences, elle constitue donc une clé de dictionnaire valide.

Q. Pouvons-nous utiliser un objet MutableSeq comme clé de dictionnaire ?

Objets MutableSeq Une différence technique importante entre les objets mutables et immuables en Python signifie que vous ne pouvez pas utiliser un objet MutableSeq comme clé de dictionnaire, mais vous pouvez utiliser une chaîne Python ou un objet Seq de cette manière. Vous pouvez également obtenir une chaîne à partir d'un objet MutableSeq, tout comme à partir d'un objet Seq.

Q. Les clés d'objet Python peuvent-elles être un dictionnaire ?

L'utilisation d'un objet personnalisé comme clé dans un dictionnaire permet d'utiliser un objet d'une classe définie par l'utilisateur comme clé dans un dictionnaire.

Q. Un objet mutable peut-il être une clé de dictionnaire ?

Tout objet avec une méthode __hash__ peut être une clé de dictionnaire. Pour les classes que vous écrivez, cette méthode retourne par défaut une valeur basée sur id (self), et si l'égalité n'est pas déterminée par l'identité pour ces classes, vous pourriez être surpris en les utilisant comme clés : Un objet peut être une clé dans un dictionnaire s'il est hachable.

Q. Comment créer un dictionnaire avec des clés immuables par défaut ?

L'un sous-classait une classe de base abstraite du module collections et l'autre sous-classait en fait dict. La justification de la sous-classification dict m'a dérouté. Plus précisément, la discussion des propriétés d'objet de __dict__ et __slots__.

Q. Pourquoi tous les objets immuables dans Python HASHABLE ?

La capacité de hachage rend un objet utilisable en tant que clé de dictionnaire et membre d'ensemble, car ces structures de données utilisent la valeur de hachage en interne. Tous les objets intégrés immuables de Python sont hachables, alors qu'aucun conteneur mutable (tel que des listes ou des dictionnaires) ne l'est.

Q. Pourquoi les objets Dict sont-ils des objets modifiables en Python ?

Les dictionnaires (objets dict) sont couramment utilisés en Python. Pour rappel, nous les définissons ainsi : Les dictionnaires sont mutables, nous pouvons donc modifier leur contenu après leur création. A tout instant, une clé du dictionnaire ne peut pointer que vers un seul élément :