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
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!