BETA

[Python]あぁ、参照渡しか

投稿日:2018-11-01
最終更新:2018-11-15

=(代入)を連結して使うと、複数の変数に同じ値を代入できる。
複数の変数を同じ値に初期化する場合などに便利。

a = b = 100
print(a)    # 100
print(b)    # 100

なんて思ったけど、その後に値をごにょごにょするにはとても使いづらい…というかバグのもとになってしまった話。

複数の変数に対し、共通部分としてListだかDictだかを上記の方法でつっこみ、条件によって適当な要素を追加していく処理を書いていたのだが、どうも様子がおかしい。
デバッグプリントしてみると、最終的にどの変数も同じ値になっていた。

そうよね、ListやDictはミュータブルな型だから参照渡しよね。
ちゃんとコピーせな。

substitution = common_list.copy()

Noneで初期化するって使い方なら良さそう。

参考

ミュータブルな型とイミュータブルな型の相違を知ろう
PythonではなくJavaScriptベースですが、裏の仕組みがとてもわかりやすいです。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@ochocoの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!