Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はリストを作ってそれを変数に代入した場合に、元のリストを変更するとその変数のオブジェクト(もちろんリスト)にもその影響が及ぶのかどうかという問題の説明です。
たとえば次のコード例を見てください。
original_list = ["Google", "Apple", "Microsoft"]
copied_list = list(inner)
copied_list
これの結果はもちろん、
["Google", "Apple", "Microsoft"]
です。
この場合は、次の2つのリストが作成されています。
では、originial_listを変更した場合、その変更はcopied_listにも影響を及ぼしてしまうのでしょうか?
Pythonのリストには、単純なリストと、多重リスト(リストの中身がリストの場合)の2つがありますが、今回は単純なリストを使って検証してみます。
またリストの変更は、
の2種類に分けて以下説明することにします。
上のコード例をそのまま掲載します。
original_list = ["Google", "Apple", "Microsoft"]
copied_list = list(inner)
copied_list
結果は当然に、
["Google", "Apple", "Microsoft"]
ではoriginal_listを変更して、その末尾に文字列Amazonを追加します。
original_list.append("Amazon")
copied_list
結果は、
['Google', 'Apple', 'Microsoft', 'Amazon']
このように、copied_listも自動的に変更されてしまいました。
copied_list = list(inner)
というのを実行していないにもかかわらず、勝手にcopied_listまで変更されています。
この場合の両オブジェクトの同一性をis演算子を使って確かめてみましょう。
original_list is copied_list
結果は、
True
となり、実は同じオブジェクトであると判明しました。
original_list = ["Google", "Apple", "Microsoft", ]
copied_list = original_list
copied_list
original_list = ["Google", "Apple", "Microsoft", "Amazon"]
original_list
copied_list
こうすると、
origina_listの結果:['Google', 'Apple', 'Microsoft', 'Amazon']
copied_listの結果:['Google', 'Apple', 'Microsoft']
このように結果が異なります。この場合はcopied_listに変更が反映されていません。
両オブジェクトの同一性を確かめましょう。
original_list is copied_list
結果は、
False
となり、両者は違うオブジェクトとわかります。
以上のことを簡単にまとめると、
変更の方法 | コピーされたオブジェクトへの影響 |
---|---|
appendを使った変更 | 自動的に変更される |
代入文を使った変更 | 自動的に変更されない |
となります。
このようにリストの構成に変更を加えるとき、appendか代入文のどちらを使うかによって処理が変わるので、その点を意識していないとエラーにハマることが考えられます。
最速でプログラミングをマスターするならTechAcademy [テックアカデミー] 【PR】がオススメです。
マイペースで学ぶなら世界最大級の動画学習サイトUdemyがオススメです。セールで安く買える講座も多数!