Array.new (3, Array.new (3))
возвращает массив, который содержит один и тот же массив трижды (другими словами: вычисляется выражение Array.new (3)
ровно один раз и копии не делаются).
Вам, вероятно, понадобится Array.new (3) {Array.new (3)}
, который оценивает Array.new (3)
три раза и, таким образом, дает вам массив из трех независимых массивов.
Правильно, Array.new (array)
возвращает новый массив, созданный с копиями размера obj (то есть ссылками размера на тот же объект obj)