Это зависит от того, сделаете ли вы новую копию данных перед ее передачей для инициализации.Для данного класса:
class MyClass
attr_accessor :big_list
def initialize(big_list)
@big_list = big_list
end
end
big_list = (0..1_000_000).to_a
big_list
будет храниться в памяти только один раз:
inst = MyClass.new(big_list)
Поскольку переменная экземпляра в классе и исходная переменная big_list
это один и тот же объект, изменение одного меняет оба:
inst.big_list.clear
puts big_list.length # => 0
Это другая история, если вы полностью переназначаете одну из переменных, потому что тогда они указывают на разные объекты (и будет использоваться дополнительная память))
inst.big_list = [1,2,3]
puts big_list.length # => 0
То же самое произойдет, если вы передадите другой список для инициализации:
inst = MyClass.new(big_list + big_list)
puts inst.big_list.length == big_list.length # => false
В этом случае в памяти будут храниться два списка, а не один.