Проблема не в том, как вы толкаете, а в том, как вы создаете массив.
Массив инициализируется с 5 ссылками на тот же массив , поэтомукогда вы изменяете одну из них, все другие копии тоже меняются.
Вам необходимо создать массив другим методом, чтобы вы создали пять различных массивов , а не пять копии одного и того же массива .Это можно сделать так:
arr = Array.new(5) { [] }
Блок (бит между {}
) выполняется для создания всех 5 элементов массива, так что в итоге вы получите 5 различных массивов.
Ваш код тогда работает как положено:
arr = Array.new(5) { [] }
=> [[], [], [], [], []]
arr[3].push("foo")
=> ["foo"]
arr
=> [[], [], [], ["foo"], []]