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>
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
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
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!