ホームページ >バックエンド開発 >Python チュートリアル >Python のオブジェクト割り当てはどのように機能するのでしょうか?また、独立したコピーを作成するにはどうすればよいですか?

Python のオブジェクト割り当てはどのように機能するのでしょうか?また、独立したコピーを作成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 01:11:15562ブラウズ

How Does Python's Object Assignment Work, and How Can I Create Independent Copies?

Python でのオブジェクトの代入を理解する

Python では、= などの代入演算子はオブジェクトのコピーを作成しません。代わりに、メモリ内の既存のオブジェクトを参照します。この動作は、次のコードに示すように、意図しない結果を引き起こす可能性があります。

dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'

print(dict_a)
print(dict_b)
print(dict_c)

期待される出力:

{}
{}
{'hello': 'goodbye'}

実際の出力:

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}

この例ではたとえば、3 つの独立した辞書を作成することを想定していました。ただし、結果は、dict_a、dict_b、および dict_c がすべて同じ辞書オブジェクトを参照していることを示しています。キーを dict_c に割り当てると共有辞書が変更され、これが 3 つの変数すべてに反映されます。

オブジェクト割り当ての問題の解決

独立したコピーを作成するという望ましい動作を実現するために、Python にはいくつかのオプションが用意されています。

  1. dict.copy() メソッド: このメソッドは浅いコピーを作成します辞書のすべてのキーと値のペアを新しいオブジェクトにコピーします。
dict_a = {1: 2}
dict_b = dict_a.copy()
dict_b[3] = 4

print(dict_a)
print(dict_b)

出力:

{1: 2}
{1: 2, 3: 4}
  1. copy.deepcopy() function: この関数は、ネストされたすべての辞書を含む、辞書のディープ コピーを作成します。オブジェクト。
import copy

dict_a = {1: 2, 'nested': {3: 4}}
dict_b = copy.deepcopy(dict_a)
dict_b['nested'][5] = 6

print(dict_a)
print(dict_b)

出力:

{1: 2, 'nested': {3: 4}}
{1: 2, 'nested': {3: 4, 5: 6}}

これらのメソッドを使用すると、Python でのオブジェクトの割り当てを制御し、共有オブジェクトへの意図しない変更を防ぐことができます。

以上がPython のオブジェクト割り当てはどのように機能するのでしょうか?また、独立したコピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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