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