Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah Tugasan Python Mencipta Salinan atau Rujukan kepada Objek?

Adakah Tugasan Python Mencipta Salinan atau Rujukan kepada Objek?

Susan Sarandon
Susan Sarandonasal
2024-12-19 12:25:14208semak imbas

Does Python Assignment Create Copies or References to Objects?

Adakah Python Memberikan Rujukan atau Menyalin?

Masalah:

Tingkah laku tugasan Python boleh mengelirukan apabila bekerja dengan objek seperti kamus. Pertimbangkan 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'}

Penjelasan:

Pembolehubah Python merujuk kepada objek dalam ingatan. Apabila anda menetapkan dict_a = dict_b, anda tidak menyalin objek kamus itu sendiri tetapi memberikan rujukan kepada alamat memori yang sama seperti dict_b. Ini bermakna perubahan yang dibuat pada satu kamus akan menjejaskan ketiga-tiga pembolehubah kerana ia menunjuk kepada objek asas yang sama.

Penyelesaian:

Untuk mencipta salinan sebenar sesuatu objek dalam Python, anda perlu menggunakan fungsi copy atau copy.deepcopy. Kod berikut akan mencipta salinan bebas kamus asal:

dict_a = dict_b.copy()  # Shallow copy
dict_a = copy.deepcopy(dict_b)  # Deep copy
  • Salinan cetek: Mencipta kamus baharu yang merujuk objek bersarang yang sama seperti yang asal.
  • Salinan dalam: Mencipta kamus baharu dan menyalin semua bersarang secara rekursif objek.

Dengan menggunakan fungsi ini, anda boleh memastikan bahawa perubahan yang dibuat pada satu kamus tidak menjejaskan yang lain.

Atas ialah kandungan terperinci Adakah Tugasan Python Mencipta Salinan atau Rujukan kepada Objek?. 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