結論
インスタンス変数もコピーされる
検証
こういうクラスがあったとして
class Test
def set_name(name)
@name = name
end
def get_name
@name
end
end
まずは普通にインスタンス変数を設定
origin = Test.new
=> #<Test:0x00007fcebd06e940>
origin.set_name("origin")
=> "origin"
origin.get_name
=> "origin"
cloneするとインスタンス変数ごとコピーされる
copy = origin.clone
=> #<Test:0x00007fcebd05d7a8 @name="origin">
copy.get_name
=> "origin"
copyの方のインスタンス変数を書き換えても元の方には影響しない
copy.set_name('copy')
=> "copy"
origin.get_name
=> "origin"
dup
dupも同様
copy2 = origin.dup
=> #<Test:0x00007fcebd054040 @name="origin">
irb(main):030:0> copy2.get_name
=> "origin"