ホームページ >バックエンド開発 >Python チュートリアル >Python の割り当てではオブジェクトのコピーまたは参照が作成されますか?

Python の割り当てではオブジェクトのコピーまたは参照が作成されますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-19 12:25:14210ブラウズ

Does Python Assignment Create Copies or References to Objects?

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'}

説明:

Python 変数はメモリ内のオブジェクトを参照します。 dict_a = dict_b を割り当てる場合、辞書オブジェクト自体をコピーするのではなく、dict_b と同じメモリ アドレスへの参照を割り当てます。これは、1 つのディクショナリに加えられた変更は、同じ基になるオブジェクトを指しているため、3 つの変数すべてに影響を与えることを意味します。

解決策:

ディクショナリの真のコピーを作成するにはPython でオブジェクトを作成するには、copy 関数または copy.deepcopy 関数を使用する必要があります。次のコードは、元の辞書の独立したコピーを作成します:

dict_a = dict_b.copy()  # Shallow copy
dict_a = copy.deepcopy(dict_b)  # Deep copy
  • 浅いコピー: 元の辞書と同じネストされたオブジェクトを参照する新しい辞書を作成します。
  • ディープコピー: 新しい辞書を作成し、ネストされたすべての辞書を再帰的にコピーします

これらの関数を使用すると、1 つの辞書に加えられた変更が他の辞書に影響を与えないようにすることができます。

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

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