配列,すべて代入,要素ごと代入,予想外,問題

あるメソッドの定義のなかで配列と代入を組み合わせると予想外のことが起きます.定義が問題ではなくて,配列と代入の組合せが問題のようです.たとえば
a=[1,2,4]
b=a
p b
b[1]=a[0]
p b
p a
b[0]=a[1]
p b
p a
を実行すると,
[1, 2, 4]
[1, 1, 4]
[1, 2, 4]
[2, 1, 4]
[1, 2, 4]
になると予想しました.b=a はずっと効いているわけではないはずだから.しかし実際は以下のように出ました.
[1, 2, 4]
[1, 1, 4]
[1, 1, 4]
[1, 1, 4]
[1, 1, 4]
a と b が同じものになってしまっているわけです.これはどういう理屈でしょうか.予想したものを出す分かりやすい方法も挙げてもらえると助かります.

ruby 1.8.2 (2004-12-25) [universal-darwin8.0]