ホームページ  >  記事  >  バックエンド開発  >  Python でのコピー操作と、コピー モジュールでのシャロー コピーおよびディープ コピー メソッド

Python でのコピー操作と、コピー モジュールでのシャロー コピーおよびディープ コピー メソッド

WBOY
WBOYオリジナル
2016-07-22 08:56:371437ブラウズ

プログラムでは、オブジェクトをコピーする必要があることがよくあります。アイデアは次のようになります。

リーリー
コピーされましたが、最初の要素の値を 5 に変更する必要があります

リーリー
b の最初の要素の値を変更しましたが、a の値も変更されました。これは、Python の = が同じリストを指しているため、リストを変更すると上記の結果が得られます。

解決策はスライス操作です

リーリー

しかし、ネストされたリストに関しては、試してみてください

リーリー

そうだ!問題ありません。リスト要素をネストしてみてください

リーリー

スライスのコピーはオブジェクトのみをコピーし、サブ要素はコピーしません

モジュールをコピー

コピーモジュールはオブジェクトのコピー操作に使用されます。このモジュールは非常に単純で、copy.copy と copy.deepcopy という 2 つの主要なメソッドのみを提供します。これらはそれぞれシャロー コピーとディープ コピーを表します。浅いコピーとは何ですか? 深いコピーとは何ですか? インターネット上には大量の情報があるため、ここでは詳しく説明しません。コピー操作は複合オブジェクトに対してのみ機能します。簡単な例を使用して、これら 2 つの方法をそれぞれ紹介します。

浅いコピーはオブジェクト自体をコピーするだけであり、オブジェクトによって参照されるオブジェクトはコピーされません。

リーリー

結果:


リーリー

同じコードをディープコピーを使用すると、結果は異なります:

リーリー

結果:


リーリー

コピーのデフォルトの動作を変更します

クラスを定義するときに、__copy__ メソッドと __deepcopy__ メソッドを定義することで、コピーのデフォルトの動作を変更できます。簡単な例を次に示します:

リーリー

結果:


リーリー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。