Python を使い始めてからまだ日が浅い初学者であるためか、思わぬところでとんだ間違いをしてしまうことがあります。先日 Python 2.7 で急ぎのプログラムを仕上げていて、そんなつまずきをしてしまいました。
使用環境は以下のとおりです。
- OS: Fedora 24 (x86_64)
- Python: python-2.7.12-2.fc24.x86_64
問題を単純化して示すと次のようになります。リストをコピーして一部の要素を変更しようとしたのですが…、
$ python Python 2.7.12 (default, Aug 9 2016, 15:48:18) [GCC 6.1.1 20160621 (Red Hat 6.1.1-3)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a = [1, 2, 3] >>> b = a >>> b [1, 2, 3] >>> b[0] = 9 >>> b [9, 2, 3] >>> a [9, 2, 3] >>>
この場合 a = b はリストのオブジェクトへの参照をコピーしているだけのようです。これは a, b それぞれのオブジェクトの id を調べることで確認できます。
>>> id(a) 140474693825960 >>> id(b) 140474693825960 >>>
下記の参考サイトに納得できる解説がありましたので、備忘録として残しておきます。
参考サイト
にほんブログ村
0 件のコメント:
コメントを投稿