Pythonチュートリアル:Pythonでディープコピーとシャローコピーの使い方を簡単に説明
Pythonオブジェクトの深いコピーと浅いコピー
basics (
Python
-
浅いコピーは、新しいコレクションオブジェクトを構築し、それに元のオブジェクトにある子オブジェクトへの参照を入れることを意味します。要するに、浅いコピーは「1階層深い」だけです。コピーのプロセスは再帰せず、したがって子オブジェクト自体のコピーは作成しません。
-
深いコピーは、コピーのプロセスが再帰的になることを意味します。つまり、まず新しいコレクションオブジェクトを構築し、次に元のオブジェクトにある子オブジェクトのコピーを再帰的に入れていきます。この方法でオブジェクトをコピーすると、元のオブジェクトとそのすべての子オブジェクトの完全に独立したクローンが作成されます。
では、浅いコピーと深いコピーの違いを強調するために、いくつかの例を見てみましょう。
浅いコピーの作成
以下の例では、新しいネストされたリストを作成し、list()
ファクトリ関数を使用してそれを浅くコピーします。
Python
これにより、ys
はxs
と同じ内容を持つ新しい独立したオブジェクトになります。両方のオブジェクトを検査することで、これを確認できます。
Python
ys
が本当に元のオブジェクトから独立しているか確認するために、少しの実験を行いましょう。元のリスト(xs
)に新しいサブリストを追加して、この変更がコピー(ys
)に影響を与えなかったことを確認してみましょう。
Python
どうですか、これは期待通りの効果がありますね。表面的なレベルでコピーされたリストの変更は問題ありませんでした。
ただし、元のリストの浅いコピーしか作成しなかったため、ys
は元の子オブジェクトへの参照をまだ含んでいる点に注意してください。