pythonの「=」について
pythonの「=」がよくわからなかったが、教えてもらったり、先述の「苦しんで覚えるC言語」でメモリとかポインタとかを勉強してちょっと分かったので、まとめる。
a = 1 b = a a = 2 a b
すると、次のようになる。
2 1
これは当然。
で、次にリストの一部を変更してみる。
a = [1,2,3] b = a a[0] = 1000 a b
すると、次のようになる。
[1000,2,3] [1000,2,3]
私はここでaだけが更新できると思ったけど、bも更新された。
混乱した。
これは、C言語でいうと、配列は配列の先頭のメモリを指定しているものであるため、
pythonのリストは確保したメモリの先頭を指定している。
従って、同じメモリ領域を使っているため、aとbが等しくなってしまうのです。
ちなみに、メモリ領域を確保しなおせば良いので、次はうまくいく。
a = [1,2,3] b = a a = [1000,2,3] a b
で、こうなる。
[1000,2,3] [1,2,3]