だんです。 >> あとdupやcloneでは、コピーで新しいオブジェクトを作れれますよー。 > > るりまの Array#dup のところの例を見ると,ポインタのコピーのように見えるのですが. > 配列オブジェクトを指すポインタオブジェクトは新しく作られますが(dup と clone で若干差は > あるようですが),配列オブジェクトそのものは元のものが一つあるだけだと思うのですが. > > ary = ['string'] > p ary #=> ["string"] > copy = ary.dup > p copy #=> ["string"] > > ary[0][0...3] = '' > p ary #=> ["ing"] > p copy #=> ["ing"] ややこしいところなのでまずこちらの方にだけ返信しますね。 配列オブジェクトをdup(またはclone)した場合、 配列オブジェクト自体がコピーされて新しく作られます。 ですが配列オブジェクトが指しているオブジェクトはコピーされません。 つまり上の ary = ['string'] の例で言うと 'string'オブジェクトはコピーされないが、'string'オブジェクトを指している 配列オブジェクト自体はコピーされています。 ポインタという言葉を使えば、配列オブジェクトはポインタの配列であり、 そのポインタの配列は新しいオブジェクトとして作られることになります。 (dupはいわゆる浅いコピーです) しかし配列(ary, copy)が指している文字列オブジェクトは、上の例では結局ひとつの同じオブジェクトなので それを書き換えてしまえば、全ての配列が中身が書き換わったように見えます。