Pythonの落とし穴? {} は空の辞書?それとも空のセット?

こんにちは。ゆうせいです。

Pythonの勉強を始めたばかりの皆さん、こんな疑問を持ったことはありませんか?

「あれ、辞書(dictionary)もセット(set)も、作るときに {}(波括弧)を使うよな…」

「じゃあ、中身が何もない『空の辞書』と『空のセット』って、どう書き分けるんだろう?」

「もしかして、書き方って同じ…?」

これは、Pythonを学ぶ多くの人が一度は「あれ?」と立ち止まる、とても大切なポイントです。

結論から言うと、答えは「いいえ、異なります!」です。

今日はこの、似ているようで全く違う「空の辞書」と「空のセット」の作り方について、スッキリ解決していきましょう。


結論:{} は「空の辞書」です

まず、絶対に覚えておいてほしいルールがこちらです。

Pythonにおいて、中身が何もない波括弧 {} を書いた場合、それは必ず「空の辞書(dict)」として扱われます

百聞は一見にしかず、コードで確認してみましょう。

# 空の辞書を作成
empty_dict = {}

# type() という関数で、変数の「型」を調べられます
print(f"{} の型は: {type(empty_dict)}")

これを実行すると、コンピューターはこう答えてくれます。

{} の型は: <class 'dict'>

ちゃんと dict、つまり辞書(dictionary)クラスだと表示されましたね。

(ちなみに、empty_dict = dict() という書き方でも、同じように空の辞書を作ることができますよ)


では「空のセット」はどう作る?

「じゃあ、{} が辞書専用なら、空のセット(set)はどうやって作るの?」と思いますよね。

答えは、set() という専用の書き方を使います。

これは「セットの型そのもの」を呼び出すようなイメージで、専門用語では「コンストラクタ」と呼んだりします。

# 空のセットを作成
empty_set = set()

# こちらの型も調べてみましょう
print(f"set() の型は: {type(empty_set)}")

実行結果はこちら。

set() の型は: <class 'set'>

はい、こちらはちゃんと set クラスだと表示されました。

これが、空のセットを作る唯一の正しい方法です。{} では作れない、としっかり覚えてください!


なぜ、こんな紛らわしいルールなの?

ここまでの説明で、「わかったけど…なんでこんなに紛らわしいの?」と感じた方もいるかもしれません。

「だって、中身があるセット{} で作れるじゃないか!」と。

その通りなんです。そこが最大の混乱ポイントですよね。

Pythonでは、中身がある場合は、書き方で辞書とセットを見分けることができます。

ちょっとコードを見てみましょう。

# 中身がある辞書 (キー:値 のペアがある)
my_dict = {"name": "Yusei", "job": "Writer"}
print(f"辞書の型: {type(my_dict)}")

# 中身があるセット (値だけがある)
my_set = {10, 20, 30}
print(f"セットの型: {type(my_set)}")

実行結果はこうなります。

辞書の型: <class 'dict'>
セットの型: <class 'set'>

なぜ見分けられるのでしょう?

それは、辞書には必ず「キー」と「値」のペアを分ける「コロン(:)」があるからです。

  • 辞書: {"name": "Yusei"} → コロン(:)がある! これは辞書だな。
  • セット: {10, 20} → コロン(:)がない! これはセットだな。

このように、中身があればPythonは賢く区別できるわけです。

でも、中身が「空っぽ」の {} だったら…?

コロンも値も何もないので、Python君は「うーん、どっちだろう?」と見分けがつきません。

そこで、Pythonが作られた時に、開発者の人たちがルールを決めたんです。

「よし、{} は昔からある辞書のために使おう。新しく登場したセットの方は、set() という名前で区別できるようにしよう!」と。

こういう歴史的な経緯もあって、今のルールになっているんですね。


まとめと今後の学習

さあ、今日のまとめです。もう迷いませんね!

ルールはたった2つです。

  • 空の辞書 を作りたい時: my_dict = {} (または dict()
  • 空のセット を作りたい時: my_set = set()

この違いは、コードを読み書きする上で非常に重要です。

なぜなら、「空のセットを作ったつもりが空の辞書になっていて、add(追加)しようとしたらエラーになった!」というバグは、新人の頃には本当によくあるミスなんです。(辞書には add メソッドがありませんからね)

「型(type)」を意識することは、プログラムを正しく動かすための第一歩です。

これからも、一つ一つの文法を「なぜそうなるのか?」と疑問に思いながら、楽しく学んでいきましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。