Pythonでイミュータブルな集合「frozenset」の使い方と応用例

Pythonには多くのデータ型がありますが、その中でも辞書(dictionary)と集合(set)は非常に便利で多用されます。しかし、これらは変更可能(mutable)なデータ型であるため、キーとして使うことはできません。この問題を解決するために、Pythonでは「frozenset」という、イミュータブル(変更不可)な集合型が提供されています。この記事では、frozensetの基本的な使い方から応用例までを詳しく解説します。

目次

基本的な使い方と特性

frozensetはsetと非常によく似ていますが、一度作成されると要素を変更することはできません。これにより、frozensetは辞書のキーや、他のセットの要素として使うことが可能です。

# frozensetの基本的な使い方
fs = frozenset([1, 2, 3, 4])
print(fs)  # 出力: frozenset({1, 2, 3, 4})

メソッド

frozensetはset型のサブクラスであるため、setが持つ非破壊的なメソッドは使用できます。しかし、要素を変更するメソッド(add、removeなど)は使用できません。

# frozensetのメソッド例
fs1 = frozenset([1, 2, 3, 4])
fs2 = frozenset([3, 4, 5, 6])

# 和集合
print(fs1.union(fs2))  # 出力: frozenset({1, 2, 3, 4, 5, 6})

応用例

辞書のキーとして使う

Pythonの辞書では、イミュータブルなデータ型しかキーとして使えませんが、frozensetはその条件を満たします。

# frozensetを辞書のキーとして使う例
d = {frozenset({1, 2, 3}): 'value'}
print(d[frozenset({1, 2, 3})])  # 出力: 'value'

他の集合の要素として使う

frozensetは他のset型やfrozenset型の要素としても使えます。これにより、より複雑なデータ構造を作ることが可能です。

# frozensetを他の集合の要素として使う例
s = {frozenset({1, 2}), frozenset({3, 4})}
print(s)  # 出力: {frozenset({1, 2}), frozenset({3, 4})}

オブジェクトの一意性を確保する

frozensetは内容が同じであれば、同じオブジェクトとみなされます。これを利用して、オブジェクトの一意性を確保する用途にも使えます。

# frozensetでオブジェクトの一意性を確保する例
fs1 = frozenset([1, 2, 3])
fs2 = frozenset([1, 2, 3])
print(fs1 is fs2)  # 出力: False

まとめ

frozensetは、Pythonでイミュータブルな集合を作成するための特殊なデータ型です。基本的な使い方から、辞書のキーとして使用するなどの応用例まで、多くの面でその有用性があります。この記事が、frozensetの理解と活用の一助となれば幸いです。

コメント

コメントする

目次