【Python】frozenset型とは?使い方について解説!
(*このページは2021年1月13日に更新されました。)
Pythonのfrozenset型とはイミュータブルなset型であり、タプル(tuple)のように、複数の値を格納できますが一度定義すると操作することができない型となります。
その為、要素の追加や削除など要素自体を操作することはできません。
しかし、frozenset型とはイミュータブルなset型である為、コピーしたり、要素を検索したり、長さを調べたり、集合計算を行ったりするなど、要素自体を変更しない操作は可能です。
今回はPythonのfrozenset型の使い方について以下の内容で解説していきます。
⚫︎ frozenset型とは
⚫︎ frozenset型の使い方
⚫︎ frozenset型では使用できない操作
⚫︎ frozenset型の要素を操作する方法
frozenset型とは
Pythonのfrozenset型とはイミュータブルなset型であり、タプル(tuple)のように、複数の値を格納できますが一度定義すると、追加や削除などの操作することができません。
つまり、set型であるが仕様はタプルのイメージとなります。
もし、Pythonのset型について知らない、詳しく知りたい場合はこちらをご参考ください。
frozenset型の書き方
frozenset型の書き方は下記となります。
1 |
frozenset型変数 = frozenset({値1, 値2, 値3, ...}) |
frozenset型変数を定義し、値を「{}(波括弧)」で囲む前にfrozenset()で囲むことでfrozenset型を作成することができます。
frozenset型の使い方
frozenset型の使い方について紹介していきます。
frozenset型からオブジェクトに変更する
frozenset型は別のオブジェクトへ変更することができます。
リストに変更したい場合はlist()を、タプルに変更したい場合はtuple()をを使用します。
例
1 2 3 4 5 6 7 8 9 10 11 12 |
sample_frozen = frozenset({'value1', 'value2', 'value3', 'value4'}) print(sample_frozen) print(type(sample_frozen)) print('・set()でリストをfrozenset型に変更') sample_list = list(sample_frozen) print(sample_list) print(type(sample_list)) print('・set()でタプルをfrozenset型に変更') sample_tuple = tuple(sample_frozen) print(sample_tuple) print(type(sample_tuple)) |
出力結果
frozenset({‘value1’, ‘value2’, ‘value4’, ‘value3’})
<class ‘frozenset’>
・set()でリストをfrozenset型に変更
[‘value1’, ‘value2’, ‘value4’, ‘value3’]
<class ‘list’>
・set()でタプルをfrozenset型に変更
(‘value1’, ‘value2’, ‘value4’, ‘value3’)
<class ‘tuple’>
list()によってfrozenset型がリストに、tupleによってfrozenset型がタプルに変更されています。
frozenset型の長さ(要素数)を調べる
len()でfrozenset型の長さ(要素数)を調べることができます。
例
1 2 3 4 |
sample_frozen = frozenset({'value1', 'value2', 'value3', 'value4'}) print(sample_frozen) print('・len()でfrozenset型の長さを調べる') print('sample_frozenの長さ', len(sample_frozen)) |
出力結果
frozenset({‘value2’, ‘value3’, ‘value1’, ‘value4’})
・len()でfrozenset型の長さを調べる
sample_frozenの長さ 4
len()によってfrozenset型の長さ(要素数)を調べています。
frozenset型をコピーする
copy()でfrozenset型をコピーすることができます。
例
1 2 3 4 5 |
sample_frozen = frozenset({'value1', 'value2', 'value3', 'value4'}) print(sample_frozen) print('・copy()でfrozenset型をコピー') sample_frozen2 = sample_frozen.copy() print(sample_frozen2) |
出力結果
frozenset({‘value4’, ‘value3’, ‘value1’, ‘value2’})
・copy()でfrozenset型をコピー
frozenset({‘value4’, ‘value3’, ‘value1’, ‘value2’})
copy()によってfrozenset型がコピーされています。
frozenset型の要素を検索する
in演算子でfrozenset型の要素を検索することができます。
例
1 2 3 4 5 |
sample_frozen = frozenset({'value1', 'value2', 'value3', 'value4'}) print(sample_frozen) print('・in演算子でfrozenset型の要素を検索') print('value3' in sample_frozen) print('value15' in sample_frozen) |
出力結果
{‘value4’, ‘value2’, ‘value3’, ‘value1’}
・in演算子でfrozenset型の要素を検索
True
False
in演算子によって「value3」は含まれるのでTrueを、「value53」は含まれないのでFalseを返しています。
frozenset型の要素をまとめて取り出す
frozenset型の要素をまとめて取り出すにはfor文を使用します。
例
1 2 3 4 5 |
sample_frozen = frozenset({'value1', 'value2', 'value3', 'value4'}) print(sample_frozen) print('・forでfrozenset型の要素を取り出す') for i in sample_frozen: print(i) |
出力結果
frozenset({‘value4’, ‘value3’, ‘value2’, ‘value1’})
・forでfrozenset型の要素を取り出す
value4
value3
value2
value1
for文によってfrozenset型の要素をまとめて取り出すことができます。
frozenset型で集合演算を行う
frozenset型はfrozenset型同士で集合演算を行うことができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sample_frozen1 = frozenset({1, 2, 3, 4, 5, 6}) sample_frozen2 = frozenset({1, 2, 3, 4}) print(sample_frozen1) print(sample_frozen2) print('・|演算子で和集合の計算を行う') sample_set_sum1 = sample_frozen1 | sample_frozen2 print(sample_set_sum1) print('・-演算子で差集合の計算を行う') sample_set_sum2 = sample_frozen1 - sample_frozen2 print(sample_set_sum2) print('・&演算子で積集合の計算を行う') sample_set_sum3 = sample_frozen1 & sample_frozen2 print(sample_set_sum3) |
出力結果
frozenset({1, 2, 3, 4, 5, 6})
frozenset({1, 2, 3, 4})
・|演算子で和集合の計算を行う
frozenset({1, 2, 3, 4, 5, 6})
・-演算子で差集合の計算を行う
frozenset({5, 6})
・&演算子で積集合の計算を行う
frozenset({1, 2, 3, 4})
frozenset型同士で集合演算を行っています。
frozenset型を辞書のキーに設定する
set型は辞書のキーに設定することができませんが、frozenset型は辞書のキーに設定することができます。
例
1 2 3 4 5 6 7 |
sample_frozen = frozenset({1, 2, 3, 4}) print(sample_frozen) sample_dict = {} print('・frozenset型を辞書のキーに設定する') sample_dict[sample_frozen] = "value1" print(sample_dict) |
出力結果
frozenset({1, 2, 3, 4})
・frozenset型を辞書のキーに設定する
{frozenset({1, 2, 3, 4}): ‘value1’}
このように、frozenset型を辞書のキーに設定しています。
frozenset型では使用できない操作
ここでは、frozenset型では使用できない操作を紹介していきます。
frozenset型の要素を追加する
frozenset型は要素の追加を行うことができません。
要素を追加しようとすると、エラーが発生します。
例
1 2 3 4 5 6 |
sample_frozen = frozenset( {'value1', 'value2','value3', 'value4'}) print(sample_frozen) print('・add()で値を追加') sample_frozen.add('value10') print(sample_frozen) |
出力結果
#AttributeError: ‘frozenset’ object has no attribute ‘add’
「frozensetオブジェクトにはaddがない」というエラーが発生しています。
frozenset型の要素を削除する
frozenset型は要素の削除も行うことができません。
要素を削除しようとすると、エラーが発生します。
例1
1 2 3 4 5 6 |
sample_frozen = frozenset( {'value1', 'value2','value3', 'value4'}) print(sample_frozen) print('・remove()で値を削除') sample_frozen.remove('value2') print(sample_frozen) |
出力結果
#AttributeError: ‘frozenset’ object has no attribute ‘remove’
「frozensetオブジェクトにはremoveがない」というエラーが発生しています。
frozenset型を全削除する
また、clear()で全要素の削除も行うことができません。
全要素を削除しようとすると、エラーが発生します。
例2
1 2 3 4 5 6 |
sample_frozen = frozenset( {'value1', 'value2','value3', 'value4'}) print(sample_frozen) print('・clear()で値を削除') sample_frozen.clear() print(sample_frozen) |
出力結果
#AttributeError: ‘frozenset’ object has no attribute ‘claer’
こちらも「frozensetオブジェクトにはclearがない」というエラーが発生しています。
frozenset型の要素を操作する方法
frozenset型の要素を操作するには、リストやset型に一度直す必要があります。
まずは、リストに変更して、frozenset型の要素を操作してみます。
リストの場合
1 2 3 4 5 6 7 8 9 10 11 |
sample_frozen = frozenset( {'value1', 'value2','value3', 'value4'}) print(sample_frozen) print('・frozenset型をリストに変更') sample_list = list(sample_frozen) print(sample_list) sample_list.append('value100') print('・リストを再びfrozensen型に変更') sample_frozen2 = frozenset(sample_list) print(sample_frozen2) |
出力結果
frozenset({‘value3’, ‘value2’, ‘value1’, ‘value4’})
・frozenset型をリストに変更
[‘value3’, ‘value2’, ‘value1’, ‘value4’]
・リストを再びfrozensen型に変更
frozenset({‘value2’, ‘value100’, ‘value4’, ‘value3’, ‘value1’})
frozenset型を一度リストに変更し、リストの状態で操作を行い、再びfrozenset型に戻すことでfrozenset型の要素を操作することができます。
また、set型に変更することでも、frozenset型の要素を操作することができます。
set型の場合
1 2 3 4 5 6 7 8 9 10 11 |
sample_frozen = frozenset( {'value1', 'value2','value3', 'value4'}) print(sample_frozen) print('・frozenset型をset型に変更') sample_set = set(sample_frozen) print(sample_set) sample_set.add('value99') print('・set型を再びfrozensen型に変更') sample_frozen2 = frozenset(sample_set) print(sample_frozen2) |
出力結果
frozenset({‘value1’, ‘value2’, ‘value3’, ‘value4’})
・frozenset型をset型に変更
{‘value1’, ‘value2’, ‘value3’, ‘value4’}
・set型を再びfrozensen型に変更
frozenset({‘value4’, ‘value99’, ‘value1’, ‘value2’, ‘value3’})
frozenset型を一度set型に変更し、set型の状態で操作を行い、再びfrozenset型に戻すことでfrozenset型の要素を操作することができます。
今回のポイント
frozenset型はイミュータブルなset型である
⚫︎ frozenset型とはイミュータブルなset型で、タプル(tuple)のように一度定義すると、追加や削除などの操作することができない
⚫︎ frozenset型は別のオブジェクトへ変更することができる
(リストに変更したい場合はlist()を、タプルに変更したい場合はtuple()を使用する)
⚫︎ frozenset型はlen()で要素の長さ(要素数)を調べることができる
⚫︎ frozenset型はin演算子で要素を検索することができる
⚫︎ frozenset型はcopy()でコピーすることができる
⚫︎ frozenset型はfor文で要素をまとめて取り出すことができる
⚫︎ frozenset型はfrozenset型同士で集合演算を行うことができる
⚫︎ frozenset型では要素の追加や削除など、使用できない操作がある
⚫︎ frozenset型は辞書のキーとして設定することができる
(set型は辞書のキーとして設定することができない)
⚫︎ frozenset型の要素を操作するにはリストやset型に一度直す必要がある
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。