論点ずらすなよ
オブジェクトの話してんのにb=1とか値の話を持ち込んで混乱させてるのはそっちだろ

a={0,0,0}って内部では下のような処理してる
 a={} ←どこかのメモリを新規に確保、aにアドレス返す、仮にaddr1とする
 a[1]=0 ←writeFloat(addr1+offset+0, 0)
 a[2]=0 ←writeFloat(addr1+offset+4, 0)
 a[3]=0 ←writeFloat(addr1+offset+8, 0)
b=a ←bにもaの参照であるアドレスaddr1が入る
b[1]=1 ←writeFloat(addr1+offset+0, 1)
ここでは参照先のアドレスaddr1の指す先のデータ書き換えてるだけで、bのアドレス変える操作しとらんだろ?
b={0,0,0} ←aと同じように新規にメモリ確保、別メモリなのでaddr1とは違うaddr2がbに入る
ここでbはaの参照ではなく別データの参照に置き換わったってだけ
参照切れたとか言ってるけど参照切ってるのは君が書いたコード

参照って君が思ってるような選ばれた人しか使えないような高度な考えじゃなくて単なるデータが格納されているメモリのアドレスを指してるだけのものだよ?