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
Lepaskan: 2024-12-19 12:25:14
asal
212 orang telah melayarinya

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)
Salin selepas log masuk

Output Jangkaan:

{}
{}
{'hello': 'goodbye'}
Salin selepas log masuk

Output Sebenar:

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
Salin selepas log masuk

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
Salin selepas log masuk
  • 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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan