カテゴリ: Python 更新日: 2025/10/18

Pythonのfrozensetとは?ミュータブルなsetとの違いをわかりやすく解説

Pythonのfrozensetとは?ミュータブルなsetとの違い
Pythonのfrozensetとは?ミュータブルなsetとの違い

先生と生徒の会話形式で理解しよう

生徒

「先生、Pythonのsetは知っていますが、frozensetって何ですか?setとどう違うんでしょう?」

先生

「frozensetは読み方は『フローズンセット』と言って、セットの仲間ですが、変更できない特徴があります。簡単にいうと、凍ったセットのようなものです。」

生徒

「変更できないセット?それはどういう意味ですか?」

先生

「Pythonのsetは、後から要素を追加したり削除したりできます。これを『ミュータブル』と言います。反対に、frozensetは作った後に要素を変えられません。これを『イミュータブル』と言います。」

生徒

「なんでそんなふうに変えられないものがあるんですか?」

先生

「変えられないことで、データの安全性が高まったり、Pythonの他の仕組みで使いやすくなったりします。例えば、frozensetは辞書のキーに使えますが、setは使えません。」

生徒

「そうなんですね!じゃあ、具体的にどう使うのか教えてください。」

先生

「はい、では基本の使い方から説明しますね!」

1. set(セット)とfrozenset(フローズンセット)の基本

1. set(セット)とfrozenset(フローズンセット)の基本
1. set(セット)とfrozenset(フローズンセット)の基本

まず、set(セット)は重複しないデータの集まりで、後から自由に追加や削除ができるデータ型です。


fruits = {"りんご", "みかん", "バナナ"}
fruits.add("ぶどう")
fruits.remove("みかん")
print(fruits)  # {'りんご', 'バナナ', 'ぶどう'}

一方、frozenset(フローズンセット)は一度作ったら変更できません。追加や削除ができないので、安全に使えます。


frozen_fruits = frozenset(["りんご", "みかん", "バナナ"])
print(frozen_fruits)  # frozenset({'りんご', 'みかん', 'バナナ'})
# frozen_fruits.add("ぶどう")  # エラーになります

2. ミュータブル(mutable)とイミュータブル(immutable)とは?

2. ミュータブル(mutable)とイミュータブル(immutable)とは?
2. ミュータブル(mutable)とイミュータブル(immutable)とは?

ミュータブルは「変えられる」という意味で、リストやsetがこれにあたります。
イミュータブルは「変えられない」で、タプルやfrozensetがこれです。

変更できないものは、プログラムの中で安心して使えたり、データの一貫性を保ちやすかったりします。

3. frozensetの使い道:辞書のキーや集合の要素に使える

3. frozensetの使い道:辞書のキーや集合の要素に使える
3. frozensetの使い道:辞書のキーや集合の要素に使える

Pythonの辞書(dictionary)はキーに使えるデータ型が限られていて、変更できるsetは使えません。でもfrozensetなら使えます。


my_dict = {}
key_set = frozenset(["りんご", "みかん"])
my_dict[key_set] = "果物セット"
print(my_dict)  # {frozenset({'りんご', 'みかん'}): '果物セット'}

このようにfrozensetは、変更できないので辞書のキーや他のセットの要素にも使えます。

4. setとfrozensetの操作の違い

4. setとfrozensetの操作の違い
4. setとfrozensetの操作の違い

setは要素の追加・削除が自由にできますが、frozensetはできません。例えば以下のように操作を試みるとエラーになります。


s = {"a", "b", "c"}
fs = frozenset(["a", "b", "c"])

s.add("d")       # OK
# fs.add("d")    # エラー:frozensetは変更不可

s.remove("a")    # OK
# fs.remove("a") # エラー:frozensetは変更不可

操作できるのは、setだけだと覚えておきましょう。

5. frozensetの作り方と基本メソッド

5. frozensetの作り方と基本メソッド
5. frozensetの作り方と基本メソッド

frozensetは、リストやセットなどから簡単に作れます。


fs1 = frozenset(["りんご", "みかん", "バナナ"])
fs2 = frozenset({"バナナ", "メロン"})
print(fs1)
print(fs2)

frozensetは読み取り専用の集合なので、集合演算(和、積、差など)ができます。


print(fs1 | fs2)  # 和集合:{'りんご', 'みかん', 'バナナ', 'メロン'}
print(fs1 & fs2)  # 積集合:{'バナナ'}
print(fs1 - fs2)  # 差集合:{'りんご', 'みかん'}

6. まとめないけど覚えておきたいポイント

6. まとめないけど覚えておきたいポイント
6. まとめないけど覚えておきたいポイント
  • setは変更可能(ミュータブル)で、要素の追加・削除ができる
  • frozensetは変更不可(イミュータブル)で、一度作ったら要素を変えられない
  • frozensetは辞書のキーやセットの要素に使えて便利
  • 集合演算はsetもfrozensetも使える
  • 用途に応じて使い分けることが重要
カテゴリの一覧へ
新着記事
New1
Flask
FlaskでSQLインジェクションを防ぐ方法!初心者でもわかる安全なデータベース操作
New2
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
New3
Flask
Flask×Flask-SocketIOでチャットアプリを作る流れを初心者向けにやさしく解説
New4
Flask
Flaskアプリの作り方を基礎から学ぼう!初心者が覚えるべき開発の流れとは?
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonでリストを文字列に変換する方法を完全ガイド!初心者でもわかるjoinの使い方
No.7
Java&Spring記事人気No7
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
No.8
Java&Spring記事人気No8
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本