用語比較
setとfrozensetの違い|あとから変更できるか、辞書のキーにできるか(Python3基礎)
setとfrozensetは、どちらも重複のない要素の集まりを表す組み込み型で、作り方も、和集合や積集合の演算も共通です。違いは、作ったあとに中身を変えられるかどうかです。
setは中身を変えられるのでハッシュ値を持たず、frozensetは中身を変えられないのでハッシュ可能で、辞書のキーや別の集合の要素にできると覚えると、選択肢を切り分けられます。
このページは、Python公式ドキュメントの標準型の項と、Python 3.9.6での実行結果をもとに比べます。なお公式チュートリアルの「集合型」の節ではfrozensetは扱われておらず、frozensetの説明は標準ライブラリの組み込み型の項にあります。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
set
変更可能(mutable)。add()やremove()で中身を変えられる。ハッシュ値を持たないので、辞書のキーにも別の集合の要素にもできない。
frozenset
変更不可(immutable)でハッシュ可能。作ったあとは中身を変えられない。辞書のキーや別の集合の要素にできる。
見分け方
「あとから要素を足す」ならset、「辞書のキーにする」「集合の集合を作る」ならfrozenset。
違いを表で確認
| 比較軸 | set | frozenset |
|---|---|---|
| 中身の変更 | set:add()やremove()などで変更できる | frozenset:作成後は変更できない。add()は呼べない(AttributeError) |
| ハッシュ値 | set:ハッシュ値を持たない。hash({1})はTypeError | frozenset:ハッシュ可能。辞書のキーや別の集合の要素にできる |
| リテラルでの作り方 | set:{'jack', 'sjoerd'} のように波括弧で作れる(空の集合は set() ) | frozenset:専用のリテラルはなく、frozenset(iterable) で作る |
| 演算と比較 | set:和・積・差などの演算が使え、その場で更新するupdate()なども使える | frozenset:和・積・差などの演算は使えるが、中身をその場で書き換えるupdate()などのメソッドはない |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
集合を辞書のキーにしたい人
frozensetにします。setはハッシュ値を持たないので、キーにするとTypeErrorになります。
集合の中に集合を入れたい人
内側をfrozensetにします。公式ドキュメントは、集合の集合を表すには内側の集合をfrozensetにする必要があると述べます。
要素をあとから足し引きしたい人
setを使います。frozensetには、中身を変えるadd()やupdate()がありません。
具体例で使い分ける
例 1
集合を辞書のキーにする場合
{1, 2} と frozenset({1, 2}) のそれぞれを、辞書のキーにします。
- Python 3.9.6で {{1, 2}: 0} を実行すると、TypeError: unhashable type: 'set' になります。
- {frozenset({1, 2}): 0} は実行でき、{frozenset({1, 2}): 0} という辞書になります。
- 作ったあとで、frozenset({2, 1}) で同じキーの値を取り出すこともできます。集合は順序を持たないので、要素が同じなら同じキーとして扱われます。
結論: 辞書のキーにできるのはfrozensetです。
例 2
要素を追加する場合
{1}.add(2) と frozenset({1}).add(2) を実行します。
- setの {1}.add(2) は実行でき、Noneを返します(setが変更されるだけです)。
- frozensetの frozenset({1}).add(2) は、AttributeError: 'frozenset' object has no attribute 'add' になります。
結論: 要素を足せるのはsetだけです。
例 3
setとfrozensetを混ぜて演算する場合
frozenset('ab') | set('bc') と set('ab') | frozenset('bc') の結果の型を調べます。
- 公式ドキュメントは、setとfrozensetを混ぜた二項演算は、最初のオペランドの型を返すと述べます。
- Python 3.9.6で調べると、前者はfrozenset、後者はsetでした。
- また、set('abc') == frozenset('abc') はTrueです。比較は型でなく中身の要素で行われます。
結論: 結果の型は左側で決まり、中身が同じなら等しいと判定されます。
問題文から答えを選ぶ手順
- 1
変更するかを見る
作ったあとに要素を足し引きするならsetです。
- 2
キーや要素にするかを見る
辞書のキーにする、または別の集合の要素にするならfrozensetです。
- 3
演算の結果の型を見る
setとfrozensetを混ぜた演算は、左側の型になります。
試験での見分け方
- 1setは変更可能でハッシュ値を持たない。辞書のキーにも別の集合の要素にもできない。
- 2frozensetは変更不可でハッシュ可能。辞書のキーや別の集合の要素にできる。
- 3集合の集合を作るときは、内側の集合をfrozensetにする。
- 4setとfrozensetを混ぜた二項演算は、最初のオペランドの型を返す。
誤答しやすい選択肢
frozensetには集合の演算が使えないと考える
修正: 使えます。和・積・差などの演算はfrozensetでも使えます。使えないのは、中身を変える操作です。
空のsetを {} で作れると考える
修正: 空の集合は set() で作ります。{} は空の辞書になります。
中身が同じでも、setとfrozensetは等しくないと考える
修正: set('abc') == frozenset('abc') はTrueです。比較は要素で行われます。
確認問題
Q1辞書のキーにできるのは、setとfrozensetのどちらですか?
答え: frozenset
frozensetは変更不可でハッシュ可能です。setはハッシュ値を持たないのでキーにできません。
Q2集合の集合を作るとき、内側の集合に使う型は?
答え: frozenset
公式ドキュメントは、集合の集合を表すには内側の集合をfrozensetにする必要があると述べます。
Q3frozenset('ab') | set('bc') の結果の型は?
答え: frozenset
setとfrozensetを混ぜた二項演算は、最初のオペランドの型を返します。
到達チェック
- setは変更可能でハッシュ値を持たないと言える
- frozensetは変更不可でハッシュ可能と言える
- 辞書のキーにできるのはfrozensetだけと言える
関連ページで確認する
同じ資格で次に知りたいこと
- staticmethodとclassmethodの違い|第一引数にクラスを受け取るか(Python3基礎)
staticmethodとclassmethodの違いを、Python公式ドキュメントの記述(暗黙の第一引数の有無、継承時に渡されるクラス)と実行結果で整理。Python3エンジニア認定基礎試験のクラスの選択肢を切り分ける判断手順と確認問題つき。
- rangeとlistの違い|リストに見えて実はリストではない(Python3基礎)
rangeとlistの違いを、Python公式チュートリアル4.3の記述(rangeはリストのように振る舞うが本当はリストではない)とPython 3.9.6の実行結果で整理。printの表示、要素の変更、list()で変える場面を切り分ける判断手順と確認問題つき。
- zip() と enumerate() の違い(2つのリストを同時に回すか、番号つきで回すか)
Pythonの zip() と enumerate() の違いを、for文での取り出し方、長さが違うときの動き、strict=True と start 引数まで、Python3基礎試験の判断手順と確認問題つきで解説します。
よくある質問
Qsetとfrozensetの違いは?
setは作成後に中身を変更でき、ハッシュ値を持ちません。frozensetは変更できず、ハッシュ可能なので辞書のキーや別の集合の要素にできます。
Qなぜsetは辞書のキーにできないのですか?
公式ドキュメントは、setは変更可能なのでハッシュ値を持たず、辞書のキーにも別の集合の要素にもできないと述べます。
Qfrozensetはどう作りますか?
frozenset(iterable) で作ります。引数を省くと空のfrozensetになります。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
