2次元配列のコピー

Rubyのオブジェクトはdupでコピーされるが、参照先のオブジェクトまで辿ってはコピーしてくれない。
一方、Rubyでは配列は1次元配列しかない。多次元配列は配列の配列という形で定義していく必要がある。
これらより2次元配列をコピーするには各行についてそれぞれの列をコピーするという処理を明示的に行わないといけない。
例えば、2次元配列aがあったとして、b = a.dupでは行の分だけがコピーされ、別オブジェクトになるが、列要素は元のaのものを
参照してしまう。このため、a[0][0] = 3とかやるとb[0][0]の値も3に書き換わってしまっている。多次元配列をコピーするには
例えば以下のように

aaa = []

print aaa

aaa << [1,2,3]
aaa << [4,5,6]
aaa << [7,8,9]

# 行のコピー
ccc = aaa.dup

# 各列要素のコピー
x = 0
while x < 3 do
	ccc[x] = aaa[x].dup
	x = x + 1
end


aaa[0][0] = 10

print aaa    # aaaの値は更新されているが、
print ccc    # bbbの値は更新されない。