Pythonのチュートリアル:Pythonのリストの割り当て、コピーは、詳細な5種類の深い浅いコピーのコピー
アウトライン
この質問のリスト、一見単純なコピーをコピーしますが、それは、特に初心者のために、多くの知識を持っているが、もちろん、物事は、このようなリストの割り当て、コピーとして、うまくいかなかったが、最後に浅いと深いコピーなど複雑な用語をコピー違いと効果は何ですか?
リストの割り当て
#は、新しいリストを定義
L1 = [1,2 ,. 3 ,. 4 ,. 5]
割当て位L2
、L2 = L1
プリント(L1)
[0] = 100 L2を
印刷(L1)
サンプルの結果:
[1、2、3、4、5]
[100、2、3、4、5]
あなたが見ることができ、L1、L2は、リストオブジェクトを可変に属し、Pythonで、一見単純な「コピー」、変更された割り当ての後に変更され、変更可能なオブジェクトの複製は、メモリ空間のリストに実際に似ていますCポインタは再び新しい変数名ではなく、そのようなコピーするときに新しいメモリ空間の割り当てを作成する文字列として不変オブジェクトを指します。この時点で、すなわちL1とL2は、それの後、どのように真のコピー、メモリ空間の同じ部分ですか?
シャローコピー
要素のリストが不変オブジェクトであるとき、私たちは次の方法でリストに値を割り当てることができます。
コピーインポート
#の新たなリスト定義
L0 = [1、2 ,. 3 ,. 4 ,. 5。]
プリント(L0)
プリント( ' - ' * 40)
スライスを使用してください
L1 = L0 [:]
L1 [0] = 100
プリント(L0)
モジュールのコピーを使用します
インポートコピー
L2 = copy.copy(L0)
L2 [0] = 100
プリント(L0)
リストを使用してください()
L3 =リスト(L0)
L3 [0] = 100
プリント(L0)
拡張メソッドのリストを使用して
L4 = []
L4.extend(L0)
L4 [0] = 100
プリント(L0)
リストの内包表記を使用します
L5 = [iについてL0におけるI]
L5 [0] = 100
プリント(L0)
あなたは[1、2、3、4、5]、我々は成功したリストのコピーを行った最終的な印刷結果が見ることができますが、条件が不変オブジェクトであることを要素のリストにする必要がありますか?リスト内の要素である場合、可変オブジェクトがオブジェクトへの参照を持っているので、むしろそのような場合、コピーとして参照新しいメモリ空間を作成するよりも、発生します。
= L0 [1、2、[3]、4、5]
印刷(L0)
L2 = L0の[:]
L2 [2] [0] = 100
プリント(L0)
サンプルの結果:
[1、2、[3]、4、5]
[1、2、[100]、4、5]
オブジェクトが変数リストL0を含む場合、可変要素は、L2を変化させる、請求複製のL1 [2]、オブジェクトL0 L0における変数[2]も変化するので、どのように達成することがわかりますそれの真の完全なコピー?
ディープコピー
コピーモジュールをコピー深いdeepcopyを使用します:
インポートコピー
L0 = [1、2、[3]、4、5]
印刷(L0)
L2 = copy.deepcopy(L0)
L2 [2] [0] = 100
プリント(L2)
プリント(L0)
サンプルの結果:
[1、2、[100]、4、5]
[1、2、[3]、4、5]
もっとPythonのチュートリアルは誰を更新していきます!初心者のPythonはほとんどの友人がああ行くPythonの学習ルートシステムに従わなければなりません!