Strange behavior of Array

I want a multidimensional array with initial value 0, so I create it by

arr = Array.new(3, Array.new(3, 0)) => [[0, 0, 0], [0, 0, 0], [0, 0,
0]]

now I change the arr[0][0] to 1

arr[0][0] = 1
arr => [[1, 0, 0], [1, 0, 0], [1, 0, 0]]

It's so strange for me, why it's not [[1, 0, 0], [0, 0, 0], [0, 0, 0]]

···

--

:

I want a multidimensional array with initial value 0, so I create it by

arr = Array.new(3, Array.new(3, 0)) => [[0, 0, 0], [0, 0, 0], [0, 0,
0]]

You have now created an array consisting of three copies of the SAME
array [0,0,0].

This is a FAQ.

-s

···

In message <ae8a916c0706092013w592e1730y59b0c9d7d55d7005@mail.gmail.com>, "huang zhimin" writes

Peter Seebach wrote:

···

In message <ae8a916c0706092013w592e1730y59b0c9d7d55d7005@mail.gmail.com>, "huang zhimin" writes
:

I want a multidimensional array with initial value 0, so I create it by

arr = Array.new(3, Array.new(3, 0)) => [[0, 0, 0], [0, 0, 0], [0, 0,
0]]

You have now created an array consisting of three copies of the SAME
array [0,0,0].

This is a FAQ.

-s

Yeah, but at least give the guy a link to the correct solution, or something.

This is how you do it:
arr = Array.new(3) { Array.new(3, 0) }

Dan