だんです。

> いややっぱり配列が絡むとややこしくなりますね。
> 以下のような代入によるaの内容の違い話かな…
> ちょっとややこしいですね。
>
> a = ["hi", "hello"]
> x = a[0]
> p a
>
> a[0] = "bye"
> p a

いまさらですが、自分で書いたこのコードこれだと最初のxへの代入が意味不明でした。。

念のため書きたかったコードを書いておきます。

a = ["hi", "hello"]
x = a[0]
x = "bye"
p a #=> ["hi", "hello"]

a[0] = "bye!"
p a #=> ["bye!", "hello"]


# 補足でreplaceの例も書いておきます。

a = ["hi", "hello"]
x = a[0]
x.replace "bye!"
p a #=> ["bye!", "hello"]


# あと「+=」はちょっと注意が必要で、
# 「x += "!!"」というのは「x = x + "!!"」のことなのでやっぱり
# 新しいオブジェクトの代入になってしまうんですよね。

a = ["hi", "hello"]
x = a[0]
x += "!!"
p a #=> ["hi", "hello"]