Hello,
x=[1,2,3]
y=x.dup
this is a shadow copy, I know the theory behind it.
z=x
is this a deep copy? (z is the deep copy of x?)
Thanks
Hello,
x=[1,2,3]
y=x.dup
this is a shadow copy, I know the theory behind it.
z=x
is this a deep copy? (z is the deep copy of x?)
Thanks
Eva wrote in post #960269:
Hello,
x=[1,2,3]
y=x.dupthis is a shadow copy, I know the theory behind it.
z=x
is this a deep copy? (z is the deep copy of x?)
Thanks
I don’t think it’s deep copy.
irb(main):010:0> print z.id
137429210=> nil
irb(main):011:0> print x.id
137429210=> nil
irb(main):012:0> print y.id
137515980=> nil
irb(main):013:0> z.push 4
=> [1, 2, 3, 4]
irb(main):014:0> p x
[1, 2, 3, 4]
=> [1, 2, 3, 4]
2010/11/9 Eva [email protected]:
x=[1,2,3]
y=x.dupthis is a shadow copy, I know the theory behind it.
Actually it’s called “shallow copy”. And what #dup really does
depends on the class so it could even implement a deep copy (although
that is normally not the case). In the case of Array you are correct,
it’s a shallow copy.
z=x
is this a deep copy? (z is the deep copy of x?)
No, there is no copy of state at all. This is called “aliasing”: now
both z and x point to the same object.
Example for deep copy:
z = Marshal.load(Marshal.dump(x))
Kind regards
robert
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs