From: daz Date: 2003-09-26T15:24:49+09:00 Subject: Re: memory and storing references to data structures "sdv" wrote > I want to hold data from structures in another array, modify the external > structures so that the array still refelects the changes: I've done as > shown underneath but am i storing a 'reference' in the c/c++sense or am I > duplicating data in the 'stuff' object? I dont wont to excessive memory > usage. > > def main > stuff=Hash::new() > a1=['a','b','c'] > b1=['a','d','f'] > ll=nil > > ['a','b','c','d','e','f'].each {|i| > stuff[i]=Array::new() > } > > stuff['a'].push(a1) > stuff['a'].push(b1) > puts "#{stuff['a']}" > a1[0]='foo' > puts "#{stuff['a']}" > end > > main stuff=Hash[] a1=['a','b','c'] b1=['a','d','f'] ['a','b','c','d','e','f'].each {|i| stuff[i]=Array::new() } stuff['a'].push(a1) stuff['a'].push(b1) p stuff['a'] a1[0]='foo' p stuff['a'] a1.size.times do |ix| p [ a1[ix], stuff['a'][0][ix] ] puts 'OK' if a1[ix].object_id == stuff['a'][0][ix].object_id end #-> [["a", "b", "c"], ["a", "d", "f"]] #-> [["foo", "b", "c"], ["a", "d", "f"]] #-> ["foo", "foo"] #-> OK #-> ["b", "b"] #-> OK #-> ["c", "c"] #-> OK Comparing object_id shows whether or not you're referring to the same objects. In your example, you are. daz