Accéder au contenu principal

Ensemble figé Python : Pourquoi cela existe et quand en avez-vous besoin ?

Découvrez comment les ensembles figés apportent immuabilité et hachabilité aux collections Python. Veuillez apprendre quand il est préférable de choisir des ensembles figés plutôt que des ensembles classiques.
Actualisé 13 janv. 2026  · 7 min lire

Si vous avez déjà travaillé avec les ensembles Python, il est facile de négliger les ensembles figés. Il est presque identique, se comporte presque de la même manière, et pourtant, la plupart des gens ne l'utilisent pas, sauf s'ils ont une raison particulière de le faire. Cette raison se résume généralement à un seul élément : l'immuabilité.

En Python, un frozenset est une version immuable et hachable d'un ensemble. Une fois créé, il n'est plus possible d'y ajouter des éléments, d'en supprimer ou de le modifier de quelque manière que ce soit. À première vue, cela peut sembler restrictif. En pratique, cela permet des comportements que les ensembles classiques ne peuvent tout simplement pas prendre en charge, en particulier lorsque la sécurité, la prévisibilité ou l'utilisation de collections comme clés de dictionnaire sont importantes.

Ce tutoriel vise à rendre le concept de frozenset moins abstrait. Nous examinerons ce dont il s'agit, en quoi cela diffère d'un ensemble classique et dans quels cas il s'agit d'un outil approprié plutôt que d'une alternative peu connue.

Qu'est-ce qu'un frozenset en Python ?

À un niveau élémentaire, un frozenset est la version immuable d'un ensemble en Python. À l'instar d'un ensemble classique, il stocke une collection non ordonnée d'éléments uniques. La différence réside dans le fait qu'une fois qu'un ensemble figé est créé, son contenu est verrouillé. Vous pouvez toujours vérifier l'appartenance, parcourir la liste et effectuer des opérations d'ensemble telles que des unions ou des intersections. Ce que vouspouvez faire , mais pas, c'est le modifier sur place. Cette nature immuable est le point essentiel.

Vous n'utilisez pas frozenset car il offre davantage de fonctionnalités qu'un simple ensemble. Vous l'utilisez parce qu'il en fait moins, intentionnellement, et cela s'avère utile d'une manière qu'un ensemble mutable ne peut égaler.

Frozenset contre Autres collections Python

Une fois que vous comprenez ce qu'est un frozenset, la question plus pratique est de savoir quand il est pertinent par rapport aux autres types de collections proposés par Python. Les deux comparaisons les plus importantes dans la pratique concernent les ensembles et les tuples, car tous trois peuvent contenir plusieurs valeurs, mais communiquent des intentions très différentes.

Frozenset par rapport à set

La différence essentielle entre un frozenset et un ensemble est la mutabilité.

Un ensemble est modifiable. Vous pouvez ajouter des éléments, supprimer des éléments et mettre à jour le programme pendant son exécution. Cette flexibilité fait des ensembles un choix judicieux pour des tâches telles que la collecte de valeurs, le filtrage de données ou le suivi d'états qui évoluent au fil du temps.

Un ensemble figé ( frozenset) est immuable. Une fois créé, son contenu est définitif. Étant donné que Python peut s'appuyer sur cette garantie, un ensemblefigé (frozenset) est hachable, contrairement à un ensemble classique. Cela permet d'utiliser unensemble figé d' s comme clé de dictionnaire ou de le stocker dans un autre ensemble.

En pratique, le choix dépend généralement de l'intention :

  • Veuillez utiliser un ensemble lorsque la collection doit être modifiée.
  • Veuillez utiliser un frozenset lorsque la collection représente un groupe fixe qui ne doit pas être modifié.

Si vous vous surprenez à penser « cet ensemble ne devrait jamais changer après l'initialisation », c'est souvent le signe que frozenset est plus approprié.

Ensemble figé vs tuple

Les ensembles figés et les tuples sont immuables, ce qui peut les rendre interchangeables à première vue. La différence réside dans ce qu'ils représentent.

Un tuple est ordonné et positionnel. La signification de chaque élément est liée à l'endroit où il apparaît :

point = (10, 20)

Dans ce cas, l'ordre est important. L'inversion des valeurs modifierait le sens.

Un ensemble figé ( frozenset), en revanche, n'est pas ordonné et repose sur l'appartenance. Il représente un groupe où l'ordre n'a pas d'importance et où les doublons ne sont pas autorisés :

roles = frozenset({"admin", "editor"})

Cette distinction est importante pour plus de clarté. Si la collection modélise un regroupement logique d'autorisations, de balises, de catégories ou d'indicateurs, unensemble figé d' s communique généralement l'intention plus clairement qu'un tuple. Si la position ou la séquence est importante, un tuple est le choix le plus approprié.

Pourquoi l'immuabilité est-elle importante ?

C'est ici que le concept de frozenset commence à prendre tout son sens au-delà de la théorie. Lorsqu'un objet ne peut pas changer, votre modèle mental devient plus simple. Vous n'avez pas à vous demander si une autre fonction l'a modifiée ou si son contenu correspond toujours à vos attentes. Une fois créé, il reste valide. 

Python s'appuie fortement sur ce concept. Les chaînes, les nombres, les tuples et les frozenset sont tous immuables pour la même raison : ils peuvent être réutilisés, partagés et utilisés en toute sécurité comme clés de dictionnaire ou éléments dans d'autres ensembles.

Il existe également un aspect pratique en matière de sécurité. Dans les bases de code plus importantes, les mutations accidentelles constituent une source fréquente de bogues. Si une valeur représente une règle, une configuration ou un regroupement logique qui ne devrait pas changer, la rendre immuable n'est pas seulement un détail d'implémentation, c'est un signal pour toute personne qui lit le code.

C'est le créneau occupé par frozenset : l'expressivité d'un ensemble avec la prévisibilité d'un objet immuable.

Création de frozensets en Python

Une fois que l'immuabilité est comprise, la question suivante est d'ordre pratique : comment créer concrètement un ensemble figé dans du code réel ?

Création d'un ensemble figé à partir d'un itérable

La méthode la plus courante consiste à transmettre un itérable au constructeur frozenset() :

numbers = frozenset([1, 2, 3, 3, 4])
print(numbers)

Tout comme pour un ensemble classique, les doublons sont automatiquement supprimés.

Une approche courante consiste à commencer par un ensemble modifiable, puis à le « verrouiller » :

allowed_roles = {"admin", "editor", "viewer"}
allowed_roles = frozenset(allowed_roles)

Les données restent flexibles pendant leur création, puis deviennent immuables une fois qu'elles représentent une règle fixe. À partir de ce moment, Python applique cette intention.

Vous pouvez également créer un ensemble figé directement à partir d'un autre ensemble :

original = {1, 2, 3}
frozen = frozenset(original)

Ici, l'original peut encore changer, mais le congelé ne changera jamais.

Ensembles vides et erreurs courantes

La création d'un ensemble vide peut poser des difficultés, car Python ne fournit pas de littéral pour cela. Cela ne crée pas un ensemble vide :

empty = {}

Il s'agit d'un dictionnaire vide. Il n'existe pas d'équivalent {} pour frozenset. La seule manière appropriée est la suivante :

empty_frozen = frozenset()

La présence de frozenset() dans le code est un signal clair : il s'agit d'une collection intentionnellement vide et immuable, et non d'un élément destiné à être rempli ultérieurement.

Ce que vous pouvez et ne pouvez pas faire avec frozenset

Une règle empirique simple s'applique ici : les opérations de lecture sont autorisées ; les opérations de modification ne le sont pas.

Opérations frozenset prises en charge

Vous pouvez vérifier votre adhésion :

roles = frozenset({"admin", "editor"})
"admin" in roles  # True

Vous pouvez également effectuer des opérations standard sur les ensembles. Ces méthodes ne modifient pas le frozenset d'origine ; elles renvoient de nouvelles collections :

a = frozenset({1, 2, 3})
b = frozenset({3, 4, 5})

a | b   # union
a & b   # intersection
a - b   # difference

Il s'agit d'un détail important. L'immuabilité ne signifie pas que vous êtes bloqué, cela signifie simplement que l'objet d'origine reste inchangé.

Opérations non prises en charge

Tout ce qui pourrait modifier la collection n'est tout simplement pas disponible :

roles = frozenset({"admin", "editor"})
roles.add("viewer")

Cela génère une erreur AttributeError. Les méthodes telles que add(), remove() et discard() n'existent pas pour frozenset.

Lorsque vous rencontrez ces erreurs, cela signifie généralement que vous devriez utiliser un ensemble régulier ou que les données devraient être gelées plus tard dans le flux de travail, et non plus tôt.

Ensembles figés et hachabilité en Python

C'est ici que tout se concrétise. Étant donné qu'un ensemble figé ne peut pas être modifié, Python peut le hacher en toute sécurité. Cela signifie qu'il peut être utilisé dans des endroits où les ensembles classiques ne sont pas autorisés.

Utilisation des ensembles figés comme clés de dictionnaire

En Python, les clés d'un dictionnaire doivent être hachables. C'est pourquoi les listes et les ensembles ne peuvent pas être utilisés comme clés :

data = {}
data[{1, 2, 3}] = "value"  # TypeError

Un ensemble figé fonctionne car son contenu est fixe :

data = {}
data[frozenset({1, 2, 3})] = "value"

Ce modèle apparaît dans la mise en cache, les autorisations et les indicateurs de fonctionnalité, c'est-à-dire partout où la clé elle-même est une collection. Pour mieux comprendre pourquoi les clés fonctionnent de cette manière, veuillez consulter le tutoriel de DataCamp sur les dictionnaires Python. dictionnaires Python est une référence utile.

Étant donné que l'ordre n'a pas d'importance, frozenset({"read", "write"}) et frozenset({"write", "read"}) représentent la même clé, ce qui correspond souvent exactement à ce que vous souhaitez.

Frozenset à l'intérieur d'autres structures de données

La hachabilité signifie également qu'un ensemble figé peut exister au sein d'autres structures immuables ou basées sur le hachage :

groups = {
    frozenset({"admin", "editor"}),
    frozenset({"viewer"}),
}
Or as part of a composite key:
key = (user_id, frozenset(user_roles))

Ces modèles sont courants dans la mémorisation, les systèmes de configuration et les caches, où la stabilité est plus importante que la flexibilité.

Cas d'utilisation courants pour frozenset

À ce stade, frozenset devrait être perçu comme un outil intentionnel plutôt que comme un élément inhabituel de Python.

1. Représentation des collections fixes

frozenset convient parfaitement aux collections qui ne devraient jamais changer :

  • autorisations des utilisateurs
  • indicateurs de fonctionnalité
  • Types de fichiers pris en charge
  • États ou transitions autorisés
ADMIN_PERMISSIONS = frozenset({"read", "write", "delete"})

L'utilisation d'un ensemble figé ici communique clairement l'intention et empêche toute mutation accidentelle.

2. Déduplication et comparaison

Lorsque l'ordre n'a pas d'importance, frozenset simplifie les vérifications d'égalité :

a = frozenset(["red", "green", "blue"])
b = frozenset(["blue", "green", "red"])

a == b  # True

Cela facilite également la déduplication des collections de collections :

groups = [
    frozenset({"a", "b"}),
    frozenset({"b", "a"}),
    frozenset({"c"}),
]
unique_groups = set(groups)

Aucune logique de comparaison personnalisée n'est nécessaire.

Erreurs courantes et idées fausses

La plupart des confusions autour des ensembles figés proviennent du fait de les traiter comme une liste ou de supposer que toutes les collections immuables se comportent de la même manière.

S'attendre à ce que frozenset se comporte comme une liste

Un ensemble figé n'est pas ordonné. Il n'est pas possible d'indexer ce fichier, et l'ordre affiché lors de l'impression n'est pas fiable. Si vous avez besoin d'un accès positionnel, vous utilisez une structure inadéquate.

Si vous avez besoin d'un ordre cohérent pour l'affichage, veuillez le convertir explicitement :

sorted_roles = sorted(roles)

Confusion entre frozenset et l'immuabilité des tuples

Les tuples et les frozensets sont tous deux immuables, mais ils communiquent des intentions différentes.

  • Les tuples modélisent la structure et la position.
  • Modèles frozenset sans ordre d'adhésion.

Choisir la bonne option rend votre code plus clair et moins sujet aux erreurs.

Conclusion

Frozenset est un élément modeste mais utile de la boîte à outils de collecte de Python. Il vous offre la sémantique d'un ensemble (éléments uniques et non ordonnés) tout en ajoutant les garanties d'immuabilité et de hachabilité.

Cette combinaison en fait un outil particulièrement adapté à certains scénarios spécifiques : représenter des groupes fixes, utiliser des collections comme clés de dictionnaire ou créer des structures de données plus sûres dans des bases de code plus importantes où des mutations accidentelles peuvent introduire des bogues. Dans ces cas, un ensemble figé (frozenset) est souvent plus clair et plus fiable qu'un ensemble classique.

Cependant, il ne s'agit pas d'un substitut polyvalent. Si une collection doit évoluer au fil du temps, unensemble mutable set constitue le choix le plus approprié. Si l'ordre ou la signification positionnelle est important, untuple d' s est plus approprié. frozenset fonctionne mieux lorsque ses contraintes correspondent au problème que vous modélisez.

Utilisé de manière réfléchie, il s'agit d'un outil simple qui contribue à rendre le code Python plus prévisible et plus facile à comprendre.


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Rédacteur technique spécialisé dans l'IA, la ML et la science des données, rendant les idées complexes claires et accessibles.

Questions fréquentes

À quoi sert un frozenset en Python ?

frozenset est utilisé lorsque vous avez besoin d'une collection non ordonnée d'éléments uniques qui ne doivent pas changer. Les cas d'utilisation courants incluent les clés de dictionnaire, les valeurs de configuration, les ensembles d'autorisations et les clés de mise en cache.

Est-il possible de modifier un ensemble figé après sa création ?

Non. Une fois qu'un ensemble figé ( frozenset) est créé, il ne peut plus être modifié. Les méthodes telles que add(), remove() ou discard() ne sont pas disponibles. Toute opération qui combine ou compare des ensembles figés renvoie un nouvel ensemble ou un nouvel ensemble figé.

Pourquoi frozenset est-il hashable alors que set ne l'est pas ?

frozenset est hachable car il est immuable. Étant donné que son contenu ne peut pas être modifié, Python peut calculer et réutiliser sa valeur de hachage en toute sécurité. Un ensemble régulier est modifiable, ce qui perturberait le fonctionnement interne du dictionnaire ou de l'ensemble s'il était hachable.

Le frozenset est-il plus rapide que le set ?

Les performances de recherche pour frozenset sont similaires à celles deset. La principale différence ne réside pas dans la vitesse, mais dans le comportement : frozenset privilégie la sécurité et la hachabilité plutôt que les gains de performance.

Dans quels cas est-il préférable de ne pas utiliser un ensemble figé ?

Il est recommandé d'éviter l'utilisation de frozenset lorsque la collection est susceptible d'évoluer au fil du temps, lorsque l'ordre est important ou lorsque vous avez besoin d'un comportement similaire à celui d'une liste, tel que l'indexation. Dans ces cas, un ensemble, une liste ou un tuple est généralement plus approprié.

Sujets

Apprenez Python avec DataCamp

Cursus

Développeur associé Python

32 h
Apprenez Python pour le développement de logiciels, de l'écriture de fonctions à la définition de classes. Acquérir les compétences nécessaires pour lancer votre carrière de développeur !
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow