ホームページ  >  記事  >  バックエンド開発  >  Pythonでリストのクローンを作成する方法

Pythonでリストのクローンを作成する方法

silencement
silencementオリジナル
2019-05-25 09:22:073195ブラウズ

Pythonでリストのクローンを作成する方法

#Python でリストをコピーするにはどうすればよいですか?

これはとても簡単なことではありませんか? new_list = old_list にしたほうが良いのではありませんか?
これは実際に実現可能ですか?例を挙げてみましょう:

Pythonでリストのクローンを作成する方法

これは素晴らしいことだと思いませんか? 元のリストが変更されると、新しくコピーされたリストも変更されます。私が望む結果ではありません。では、なぜこのようなことが起こるのでしょうか?
Python で代入 (=) を使用すると、実際には新しい変数への参照を指しているだけであることがわかりました。簡単に言うと、a=b を実行するときの実際の操作は、次のメモリ アドレスを割り当てることです。 a. b が与えられると、この時点では、a と b は同じメモリ アドレスを指しますが、b に対して新しいメモリ アドレスは開かれないため、メモリ アドレスの値が変更されると、それに応じて b の値も変更されます。

では、それを正しくコピーするにはどうすればよいでしょうか?リストに不変データが含まれている場合は、次のメソッドを使用できます:

Pythonでリストのクローンを作成する方法

メソッドの 1 つをランダムに抽出して検証できます:

Pythonでリストのクローンを作成する方法

ご覧のとおり、今回コピーしたリストはすべて独立しており、元のリストにはまったく影響を受けません。リストが不変のデータ型である場合に使用できます。 現時点では、引き続き反例を示して説明します:

Pythonでリストのクローンを作成する方法

この時点で、これは代入 (=) を使用した結果に似ているように見えますが、異なることがわかります。実際、上記のコピー リストを使用すると、浅いコピーが実装されます。浅いコピーは実際には代入よりも少し高度で、リスト内のすべての値を新しいオブジェクトにコピーしますが、リスト内の値が変数データ (リスト、辞書、関数、クラス、など)、引用は 1 つだけコピーされます。

ディープコピー

では、コピーされたリストに変数データが​​含まれている場合、どのようにコピーすればよいでしょうか?それはとても簡単です。浅いコピーがあるところには、深いコピーもあります。深いコピーとは、すべてを新しいオブジェクトにコピーすることを意味し、すべての心配から解放されます。

Pythonでリストのクローンを作成する方法


#

以上がPythonでリストのクローンを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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