PYTHON MEBY

Pythonでfrozensetを使う

この記事ではPythonのfrozensetについて解説します。frozensetの定義、使用方法、他の集合型との違い、そして具体的な使用例を説明します。

目次

frozensetとは?

frozensetはPythonにおける不変集合(immutable set)です。一度作成されたfrozensetの内容を変更することはできません。setと異なり、要素の追加、削除、更新はできません。ハッシュキーとして使用できるため、辞書のキーとして使用することができます。

my_frozenset = frozenset({1, 2, 3})
print(my_frozenset)

このように、setと似たように定義できますが、要素の変更ができない点が異なります。

frozensetの作成方法

frozenset()コンストラクタを使用してfrozensetを作成します。引数にはイテラブルオブジェクト(リスト、タプル、setなど)を指定します。

my_list = [1, 2, 3, 3]
my_frozenset = frozenset(my_list)
print(my_frozenset) # 重複は削除されることに注意
my_tuple = (4, 5, 6)
my_frozenset = frozenset(my_tuple)
print(my_frozenset)
my_set = {7, 8, 9}
my_frozenset = frozenset(my_set)
print(my_frozenset)

frozensetのメソッド

frozensetはsetと同様にいくつかのメソッドを提供しますが、要素を変更するメソッドはありません。主なメソッドとしては、集合演算を行うunion(), intersection(), difference(), symmetric_difference()などがあります。

set1 = frozenset({1, 2, 3})
set2 = frozenset({3, 4, 5})
print(set1.union(set2)) # {1, 2, 3, 4, 5}
print(set1.intersection(set2)) # {3}
print(set1.difference(set2)) # {1, 2}
print(set1.symmetric_difference(set2)) # {1, 2, 4, 5}

これらのメソッドは新しいfrozensetを返し、元のfrozensetは変更されません。

frozensetとsetの違い

frozensetとsetの主な違いは、frozensetが不変である点です。setは要素の追加、削除、更新が可能ですが、frozensetはできません。このため、frozensetはハッシュキーとして使用できますが、setは使用できません。

my_dict = {frozenset({1, 2}): 'value'}
print(my_dict)

このように、frozensetは辞書のキーとして使用できます。

使用例

frozensetは、要素の変更が許されない状況で、集合を表すのに適しています。例えば、辞書のキーとして使用したり、集合演算の結果を保存したりする際に使用できます。

user_permissions = frozenset({'read', 'write'})
if 'write' in user_permissions:
    print('ユーザーは書き込み権限を持っています')

ユーザーの権限をfrozensetで表現することで、誤って権限を変更するのを防ぐことができます。

関連記事