pythonの「=」について

pythonの「=」がよくわからなかったが、教えてもらったり、先述の「苦しんで覚えるC言語」でメモリとかポインタとかを勉強してちょっと分かったので、まとめる。

pythonのインタラクションモードで次をやってみる。

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]