class G
 attr_accessor :a
 def initialize
  @a = []
  @m = M.new(@a)
  @a = [5]
 end
end

class M
 def initialize(a)
  @b = a
 end
 def output
  p @b
 end
end

g = G.new
g.m.output

このプログラムの結果は 5 ですよね?
その後 g.a を変えると output の結果も変わると思います
ところが g = G.new から g.m.output の間に
何をしているのかよくわからないんですが色々な処理が挟まっていて
g.a を変化させても(変化しているのに)結果が 5 のままになっています

間でどのような処理が行われている可能性があるんでしょうか?