¿Por qué palear una cadena en un hash causa este resultado? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

Comportamiento extraño e inesperado (desaparecer / cambiar valores) cuando se usa el valor predeterminado de Hash, p. Hash.nuevo ([]) 4 respuestas

Estoy trabajando a través de los Ruby Koans para obtener una mejor comprensión de Ruby y TDD. Llegué a la línea 93 en el código enabout_hashes.rb y esto me confunde cómo se incluiría en el constructor predeterminado en lugar del valor hash. Solo por curiosidad intenté usar lo mismo con una cadena como parámetro del constructor y produjo un resultado similar.

Ahora mi pregunta es por qué, cualquiera que sea la clave que use, se recupera el mismo objeto y cómo insertaría un nuevo objeto en la matriz en una clave específica en un hash en el método test_default_value_is_the_same_object?

def test_default_value_is_the_same_object
    hash = Hash.new([])

    hash[:one] << "uno"
    hash[:two] << "dos"

    assert_equal ["uno", "dos"], hash[:one] #why not ["uno"]?
    assert_equal ["uno", "dos"], hash[:two] #why not ["dos"]?
    assert_equal ["uno", "dos"], hash[:three] #why not []?

    assert_equal true, hash[:one].object_id == hash[:two].object_id
  end

def test_default_value_with_block
    hash = Hash.new {|hash, key| hash[key] = [] }

    hash[:one] << "uno"
    hash[:two] << "dos"

    assert_equal ["uno"], hash[:one]
    assert_equal ["dos"], hash[:two]
    assert_equal [], hash[:three]
end

Respuestas a la pregunta(2)

Su respuesta a la pregunta