Python問題集を解いてみよう!!

Pythonクイズ No.12

当ページのリンクには広告が含まれています。
PythonクイズNo.12
目次

問題

次のコードを実行した時の出力として正しいものは A 〜 D のどれでしょうか?

解答

正解は。。。

正解は C

22
3

です。

解説

今回は辞書の問題です。

今回の問題のポイントは1つです。

辞書のcopy()メソッド

辞書のcopy()メソッドは浅い(shallow)コピーにあたります。

浅いコピーを使って新しい変数を作る場合、一番大枠の辞書自体は別のオブジェクトとして作られますが、辞書の値にリスト・辞書がある場合、その値のリスト・辞書は同じオブジェクトになってしまいます。

今回の問題では辞書my_dict = {"one": [1], "two": [2], "three": [3]}copy()メソッドを使って辞書new_dictを作っています。

copy()メソッドが浅いコピーなので、my_dictnew_dictは別のオブジェクトですが、my_dictの要素の値がリストであるため、浅いコピーで作ったnew_dictの要素の値は同じオブジェクトになっています。

つまり、my_dict["one"]new_dict["one"]my_dict["two"]new_dict["two"]my_dict["three"]new_dict["three"]が同じオブジェクトになります。

以上を踏まえて、問題を見ていきます。

まず、new_dict["four"] = [4]my_dictnew_dictは別のオブジェクトなので、ここではnew_dictの方にだけ要素が追加されます。

次にnew_dict["two"][0] = 22my_dict["two"]new_dict["two"]は同じオブジェクトなので、new_dict["two"]に別の値を代入すると、同じオブジェクトであるmy_dict["two"]も同じ状態になります。

よって、my_dict["two"]22len(my_dict)my_dictの要素数である3となります。

ちなみに、new_dictの方は要素を1つ追加しているので、len(new_dict)4になります。

浅いコピーを避けたい場合は、copyモジュールのdeepcopy()関数を使います。

copyモジュールは Python の標準ライブラリーの1つです。

Google Colaboratory

下記リンクからアクセスして、Google Colaboratory 上で実際にコードを実行して、結果を確認していただけます。

おわりに

X で Python クイズを配信しています。

よかったらフォローしてください!

以上です。

スポンサーリンク

PythonクイズNo.12

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次