Memory and storing references to data structures

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

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

stuff[‘a’][0] << “added to stuff[‘a’][0]”

p a1 # ==> [“foo”, “b”, “c”, “added to stuff[‘a’][0]”]

main

So I think you would call it a reference. Does that help?

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

···

“sdv” foo@bar.com 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