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で表現することで、誤って権限を変更するのを防ぐことができます。