質問: list2 print('list3:' + str(list3)) list3.clear() print('list3:' + str(list3)) print('list2:' + str(list2)) ``` ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) PYTHON WINDOWS10 IDLE 3.7.0 にて実行した結果です。
回答: pythonでは代入は参照の代入であり、オブジェクトのコピーを生成しません。`list3 = list2`は単に`list2`という名前が指し示しているオブジェクトを`list3`も指し示すようにするという操作に過ぎません。 オブジェクトのコピーを生成する必要がある場合、何通りかの方法があります。 ``` # 方法1 スライスが新しいオブジェクトを返すことを利用する list3 = list2[:] # 方法2 list.copy()メソッドを使う list3 = list2.copy() # 方法3 list(x)で新たにインスタンスを生成する list3 = list(list2) # 方法4 copyモジュールを使う from copy import copy list3 = copy(list2) ``` これは有名な話題なので、公式ドキュメントのプログラミングFAQに解説があります。参考にしてください。 プログラミング FAQ — Python 3.6.5 ドキュメント | なぜ list 'y' を変更すると list 'x' も変更されるのですか?