Memahami Penyalinan Cetek
Bila mencipta salinan cetek kamus, objek kamus tidak disalin sepenuhnya. Sebaliknya, rujukan baharu kepada objek asal dibuat. Ini bermakna bahawa sebarang perubahan yang dibuat pada salinan cetek juga akan ditunjukkan dalam kamus asal.
Contoh: Kamus
Pertimbangkan contoh berikut:
original = dict(a=1, b=2) new = original.copy() new.update({'c': 3})
Dalam kes ini, baharu ialah salinan asal yang cetek. Apabila baharu dikemas kini dengan {'c': 3}, kamus asal kekal tidak berubah kerana rujukan asal dan baharu adalah objek asas yang sama.
Berbeza dengan Penyalinan Cetek dalam Senarai
Senarai berkelakuan berbeza apabila disalin cetek. Apabila mencipta salinan cetek senarai, rujukan baharu kepada objek senarai asas dibuat. Walau bagaimanapun, sebarang perubahan yang dibuat pada salinan cetek tidak menjejaskan senarai asal, kerana senarai adalah objek boleh ubah yang boleh diubah suai secara bebas.
Memahami Penyalinan Dalam
Tidak seperti cetek penyalinan, penyalinan mendalam mencipta salinan bebas objek asal yang baharu. Ini bermakna bahawa sebarang perubahan yang dibuat pada salinan dalam tidak akan menjejaskan objek asal.
Penyelesaian
Untuk mengemas kini kamus asal, anda perlu membuat salinan mendalam bukannya salinan cetek. Kod berikut menggunakan copy.deepcopy() untuk membuat salinan dalam:
import copy new = copy.deepcopy(original) new.update({'c': 3})
Kini, asal kekal tidak disentuh manakala baharu mempunyai nilai yang dikemas kini.
Atas ialah kandungan terperinci Mengapakah Mengemas kini Salinan Cetek Kamus Tidak Mengubah Yang Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!