0:00:00.000,0:00:05.000 ミューテーションが現在のオブジェクトを[br]変更するものだと解説してきました 0:00:05.000,0:00:10.000 しかし文字列を使って行ったものとの違いを[br]確かめることはできません 0:00:10.000,0:00:14.000 新たな変数を挿入することで[br]違いを確認することができます 0:00:14.000,0:00:17.000 前の例に戻りましょう 0:00:17.000,0:00:23.000 代入文を追加して新しい変数を挿入します 0:00:23.000,0:00:25.000 変数qを挿入すると仮定しましょう 0:00:25.000,0:00:31.000 そしてpをqに代入します[br]つまりこのリストのオブジェクトであるpの値が 0:00:31.000,0:00:34.000 qが参照するものになるということです 0:00:34.000,0:00:40.000 ここで重要なのは代入後に[br]pとqが同じリストを参照しているということです 0:00:40.000,0:00:46.820 qの要素の値を1つ変更する代入文を[br]行ったと仮定します 0:00:50.000,0:00:53.000 これでqの要素4が変更されます 0:00:53.000,0:00:55.000 これがqの要素4です 0:00:55.000,0:01:01.000 その値を新たな感嘆符に変更します 0:01:01.000,0:01:03.000 pの値も変更されます 0:01:03.000,0:01:07.000 代入文にはpが含まれていませんが 0:01:07.000,0:01:13.000 pとqは同じオブジェクトを参照しているので[br]pの変数も変更されることになります 0:01:13.000,0:01:17.000 文字列を使用した場合は異なることを確認するために[br]文字列でこれを試してみましょう 0:01:17.000,0:01:20.000 文字列で最初の文字を置き換えるために[br]代入を使用した場合 0:01:20.000,0:01:23.000 何が起きるか予想してみてください 0:01:23.000,0:01:25.000 実行してみましょう 0:01:25.000,0:01:27.000 エラーが出ました 0:01:27.000,0:01:30.000 文字列が変更できないものだったからです 0:01:30.000,0:01:32.000 文字列の値を変更する方法はありません 0:01:32.000,0:01:36.000 文字列に代入する方法はありませんという[br]エラーが表示されます 0:01:36.000,0:01:41.000 これは不変的なオブジェクトなので[br]代入に対応していません 0:01:41.000,0:01:44.000 変更できるオブジェクトと[br]できないオブジェクトの重要な違いは 0:01:44.000,0:01:47.000 オブジェクトが変更できる場合は 0:01:47.000,0:01:51.000 同じオブジェクトを参照しているかもしれない[br]他の変数に注意しなければならないことです 0:01:51.000,0:01:53.000 そのオブジェクトの値を変えます 0:01:53.000,0:01:57.000 変更したと思われる変数だけでなく 0:01:57.000,0:02:00.000 他の変数の値にも同じように作用します 0:02:00.000,0:02:02.000 この例を確かめてみましょう 0:02:02.000,0:02:07.000 pを文字列Helloを含むリストに設定します 0:02:07.000,0:02:13.000 新しい変数qを挿入しその変数にpを代入します 0:02:13.000,0:02:15.000 pとqの値を出します 0:02:15.000,0:02:19.000 pとq両方が文字列Helloを含んでいると[br]確認できますね 0:02:19.000,0:02:23.000 しかしここでゼロの位置にある値を[br]変更してみましょう 0:02:23.000,0:02:30.000 pのゼロの位置にある値に[br]文字Yを保持する代入を行います 0:02:30.000,0:02:35.000 これによってpの値が変更されます 0:02:35.000,0:02:39.740 驚くことにqの値も変更されます 0:02:43.000,0:02:49.000 代入でqを使用していないにもかかわらず[br]qの値が変更されました 0:02:49.080,0:02:51.360 qがpと同じオブジェクトを参照しているからです