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 にはいくつかのオプションが用意されています。
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}
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 サイトの他の関連記事を参照してください。