Create copy of array without changing original


#1

Why is it that if I create an array, a = [1,2,3]
then do b = a
then b[0] = 99

why is that a[0] magically becomes 99 too?

how can I preserve ‘a’ after I make a copy of it, then change that new
copy?


#2

I just found method dup.

So I can do a = [1,2,3]
b = a.dup
b[0] = 99

and then a and be will not be the same.

Thanks.


#3

On Jan 16, 2009, at 1:06 PM, Jason L. wrote:

Why is it that if I create an array, a = [1,2,3]
then do b = a
then b[0] = 99

why is that a[0] magically becomes 99 too?

a = [1,2,3]
a.object_id #=> 604244548
b = a
b.object_id #=> 604244548

Your two variables are referring to the same object … or another way
of saying that is all variables in ruby hold a reference to an object.
To get a copy of your array …

b = a.dup
b.object_id #=> 604262918

Welcome to ruby!

Blessings,
TwP


#4

On Sat, Jan 17, 2009 at 05:06:21AM +0900, Jason L. wrote:

Why is it that if I create an array, a = [1,2,3]
then do b = a
then b[0] = 99

why is that a[0] magically becomes 99 too?

b = a points to the same area of memory as a for lists.

how can I preserve ‘a’ after I make a copy of it, then change that new
copy?

b = a.clone

Should copy the list.