Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Tugasan Objek Python Berfungsi, dan Bagaimana Saya Boleh Mencipta Salinan Bebas?

Bagaimanakah Tugasan Objek Python Berfungsi, dan Bagaimana Saya Boleh Mencipta Salinan Bebas?

Barbara Streisand
Barbara Streisandasal
2024-12-07 01:11:15562semak imbas

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

Memahami Tugasan Objek dalam Python

Dalam Python, pengendali tugasan, seperti =, tidak membuat salinan objek. Sebaliknya, mereka merujuk kepada objek sedia ada dalam ingatan. Tingkah laku ini boleh membawa kepada akibat yang tidak diingini, seperti yang ditunjukkan dalam kod berikut:

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

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

Output Jangkaan:

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

Output Sebenar:

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

Dalam ini contoh, kami menjangkakan untuk mencipta tiga kamus bebas. Walau bagaimanapun, keputusan menunjukkan bahawa dict_a, dict_b, dan dict_c semuanya merujuk kepada objek kamus yang sama. Menetapkan kunci kepada dict_c mengubah suai kamus kongsi, yang ditunjukkan dalam ketiga-tiga pembolehubah.

Menyelesaikan Isu Tugasan Objek

Untuk mencapai gelagat yang diingini untuk mencipta salinan bebas, Python menyediakan beberapa pilihan:

  1. kaedah dict.copy(): Kaedah ini mencipta salinan cetek kamus, menyalin semua pasangan nilai kuncinya ke dalam objek baharu.
dict_a = {1: 2}
dict_b = dict_a.copy()
dict_b[3] = 4

print(dict_a)
print(dict_b)

Output:

{1: 2}
{1: 2, 3: 4}
  1. salinan. deepcopy() function: Fungsi ini mencipta salinan mendalam kamus, termasuk semua bersarang objek.
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)

Output:

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

Dengan menggunakan kaedah ini, adalah mungkin untuk mengawal penetapan objek dalam Python dan menghalang pengubahsuaian yang tidak diingini pada objek kongsi.

Atas ialah kandungan terperinci Bagaimanakah Tugasan Objek Python Berfungsi, dan Bagaimana Saya Boleh Mencipta Salinan Bebas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn