クラス B や クラス C で @h を扱う際に、「元の」 h には影響しないイメージがあるんだろ
新規インスタンス内で @h に「なった」時点で前とは別物、みたいな
どこのクラスで"代入"しても元の値が変わるなんて昔の言語のグローバル変数みたいな動作だし

気を遣いたくない、イメージ通りの動作をさせたいのなら initialize のときに必ず dup しておくようにするしかないな