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年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年11月1日Pythonの「if文のネスト」深くなっていませんか? 読みやすいコードの書き方を徹底解説
山崎講師2025年11月1日Pythonの落とし穴? {} は空の辞書?それとも空のセット?
山崎講師2025年11月1日ーPythonの「:」(コロン)徹底解説!新人エンジニアが見落としがちな4つの使い方
山崎講師2025年11月1日P値とは?新人エンジニア必見!「白いカラス」で学ぶ仮説検定の第一歩