Comment pouvez-vous implémenter des dictionnaires immuables et hachables en Python ?

Patricia Arquette
Libérer: 2024-10-31 09:48:02
original
876 Les gens l'ont consulté

How Can You Implement Immutable, Hashable Dictionaries in Python?

Dictionnaires immuables et hachables en Python

Les ensembles et tuples gelés fournissent des contreparties immuables et hachables aux listes en Python. Cependant, il manque un concept similaire pour les dictionnaires. Un "figé" fournirait une représentation immuable et hachable d'un dictionnaire.

Implémentation et utilisation

Bien que Python ne propose pas nativement un type de dictionnaire figé, il est possible pour créer une implémentation personnalisée à l'aide d'une classe wrapper :

<code class="python">class FrozenDict(collections.Mapping):
    # ... (code as provided in the reference answer)</code>
Copier après la connexion

Comportement et comparaison

Les instances FrozenDict se comportent de la même manière que les dictionnaires classiques, prenant en charge l'itération, l'accès aux éléments et l'adhésion essai. Cependant, elles sont immuables, ce qui signifie qu'une fois créées, elles ne peuvent pas être modifiées.

Malgré leur immuabilité, les instances de FrozenDict peuvent être comparées quant à leur égalité en fonction de leur nature hachable :

>>> x = FrozenDict(a=1, b=2)
>>> y = FrozenDict(a=1, b=2)
>>> x is y
False
>>> x == y
True
Copier après la connexion

Utilitaire

FrozenDict est particulièrement utile pour la mise en cache et la mémorisation, où des clés immuables et hachables sont requises. Par exemple, il peut être utilisé pour stocker une version hachée des valeurs d'un dictionnaire pour des comparaisons efficaces :

>>> cache = {}
>>> def memoized_function(args):
>>>     key = FrozenDict(args)
>>>     if key in cache:
>>>         return cache[key]
>>>     else:
>>>         result = ...  # Computation here
>>>         cache[key] = result
>>>         return result
Copier après la connexion

PEP 603

Il convient de noter que PEP 603 a proposé un type Frozendict natif en Python, mais il a été retiré en raison de préoccupations concernant son utilité potentielle. Néanmoins, les implémentations personnalisées telles que FrozenDict fournissent une solution pratique pour les situations où des dictionnaires immuables et hachables sont requis.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!