frozensetはPythonで不変(イミュータブル)な集合を作成するための組み込み関数です。通常のset型と異なり、一度作成した後は要素の追加・削除・変更ができない特徴があります。
frozenset()の基本的な使い方
frozenset()は以下のように使用します:
# リストからfrozensetを作成
numbers = frozenset([1, 2, 3, 4, 5])
print(numbers) # frozenset({1, 2, 3, 4, 5})
# タプルからfrozensetを作成
colors = frozenset(('red', 'blue', 'green'))
print(colors) # frozenset({'red', 'blue', 'green'})frozensetの特徴
1. 不変性
frozensetは一度作成すると変更できません:
numbers = frozenset([1, 2, 3])
# 以下のコードはエラーになります
# numbers.add(4) # AttributeError
# numbers.remove(1) # AttributeError2. ハッシュ可能
frozensetはハッシュ可能なため、辞書のキーや他のsetの要素として使用できます:
# 辞書のキーとして使用
fs = frozenset([1, 2, 3])
d = {fs: "value"}
print(d) # {frozenset({1, 2, 3}): 'value'}3. セット演算のサポート
通常のsetと同様、様々なセット演算が可能です:
fs1 = frozenset([1, 2, 3])
fs2 = frozenset([3, 4, 5])
# 和集合
print(fs1 | fs2) # frozenset({1, 2, 3, 4, 5})
# 積集合
print(fs1 & fs2) # frozenset({3})
# 差集合
print(fs1 - fs2) # frozenset({1, 2})frozensetの主な用途
1. 定数として使用する集合の定義
2. 辞書のキーとして使用
3. 不変な集合データの保持
frozensetとsetの違い
| 特徴 | frozenset | set |
|------|-----------|-----|
| 変更可能 | ✗ | ○ |
| ハッシュ可能 | ○ | ✗ |
| セット演算 | ○ | ○ |
| 辞書のキー | ○ | ✗ |
実践的な使用例
# ユーザーの権限を管理する例
admin_privileges = frozenset(['read', 'write', 'delete'])
user_privileges = frozenset(['read', 'write'])
# 権限チェック
def has_privilege(user_privs, required_priv):
return required_priv in user_privs
print(has_privilege(admin_privileges, 'delete')) # True
print(has_privilege(user_privileges, 'delete')) # Falsefrozensetは、変更されては困るデータを扱う場合や、ハッシュ可能なセットが必要な場合に特に有用です。イミュータブルな特性を活かして、データの整合性を保ちながらプログラミングを行うことができます。