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)  # AttributeError

2. ハッシュ可能

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'))   # False

frozensetは、変更されては困るデータを扱う場合や、ハッシュ可能なセットが必要な場合に特に有用です。イミュータブルな特性を活かして、データの整合性を保ちながらプログラミングを行うことができます。