From: Charles Mills Date: 2006-03-13T09:53:44+09:00 Subject: Re: freeze and hash Sch�le Daniel wrote: > Hello > > irb(main):069:0* a = Hash.new([]) > => {} > irb(main):070:0> a[1] << "X" > => ["X"] > irb(main):071:0> a.freeze > => {} > irb(main):072:0> a.frozen? > => true > irb(main):073:0> b = a.dup > => {} > irb(main):074:0> b.frozen? > => false > irb(main):075:0> b.default > => ["X"] > irb(main):076:0> b[11] << "Y" > => ["X", "Y"] > irb(main):077:0> b.default > => ["X", "Y"] > irb(main):078:0> a.default > => ["X", "Y"] > irb(main):079:0> a.frozen? > => true > irb(main):080:0> b.frozen? > > as one can see a.default is a flat copy > so a is modified though it's frozen > > what is the usual idom to get deep copy? > > Regards, Daniel Try a = Hash.new { [] } When a default value is needed the proc is run and its return value is used. See ri Hash.new for more info. -Charlie