[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

create copy of array without changing original

Jason

1/16/2009 8:06:00 PM

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?
--
Posted via http://www.ruby-....

3 Answers

Jason

1/16/2009 8:26:00 PM

0

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.
--
Posted via http://www.ruby-....

Tim Pease

1/16/2009 8:32:00 PM

0

On Jan 16, 2009, at 1:06 PM, Jason Lillywhite 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



Abhi Yerra

1/16/2009 10:05:00 PM

0

On Sat, Jan 17, 2009 at 05:06:21AM +0900, Jason Lillywhite 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.

> --
> Posted via http://www.ruby-....