Hash.newの挙動について、理解できないことがありましたので、教
えてください。

h = {}
h[0] = []
h[0] << 0
h[0] << 1
p h                    # <= {0=>[0, 1]}

と同じことをやろうとして、

h = Hash.new([])
h[0] << 0
h[0] << 1
p h                    # <= {}           どうして?

とすると、なぜはhは空っぽのまま。試みに

h = Hash.new([])
h[0] += [0]
h[0] += [1]
p h                    # <= {0=>[0, 1]}  期待通り

とすると、期待通りの結果になりました。

Arrayはどうだろうと思って

a = Array.new(1,[])
a[0] << 0
a[0] << 1
p a                    # <= [[0, 1]]     期待通り

を試すと、これも期待通り。

2番目のコードがどうしてああいう結果になるのか教えてください。

ちなみに、使用したRubyはDebian GNU/Linux(woody)のバイナリパッ
ケージ版で、
| ruby 1.6.2 (2000-11-27) [i486-linux]
です。

-- 
川村 尚生