Shallow Copy vs. Deep Copy dalam Python: Memahami Kesan pada Kamus
Salinan cetek kamus dalam Python, dicipta menggunakan dict .copy(), mungkin tidak mengemas kini kamus asal seperti yang diharapkan. Tingkah laku ini berpunca daripada konsep penyalinan cetek vs. dalam.
Apakah Penyalinan Cetek?
Dalam salinan cetek, kandungan kamus dirujuk, sebaliknya daripada disalin mengikut nilai. Ini bermakna kedua-dua kamus asal dan salinan menunjukkan struktur data asas yang sama.
Demonstrasi:
>> original = dict(a=1, b=2) >> new = original.copy() >> new.update({'c': 3}) >> original {'a': 1, 'b': 2}
Bertentangan dengan jangkaan, kamus asal kekal tidak berubah selepas salinan cetek dikemas kini. Ini kerana rujukan kepada data dikongsi, bukan disalin.
Bagaimana Senarai Berbeza:
Tidak seperti kamus, senarai penyalinan cetek menghasilkan rujukan bersama kepada data. Ini kerana senarai mengandungi nilai mengikut rujukan.
>> original = [1, 2, 3] >> new = original >> new.append(4) >> new, original ([1, 2, 3, 4], [1, 2, 3, 4])
Dalam kes ini, kedua-dua senarai asal dan senarai baharu merujuk data yang sama, jadi perubahan yang dibuat kepada satu mempengaruhi yang lain.
Menyalin Dalam dengan copy.deepcopy()
Untuk mencipta salinan kamus yang benar-benar berbeza, termasuk kandungannya, copy.deepcopy() mesti digunakan. Fungsi ini menyalin struktur dan nilai mengikut nilai, memastikan pengasingan lengkap.
import copy >> original = dict(a=1, b=2) >> new = copy.deepcopy(original) >> new.update({'c': 3}) >> original {'a': 1, 'b': 2} >> new {'a': 1, 'c': 3, 'b': 2}
Jenis Operasi Salin:
Atas ialah kandungan terperinci Shallow vs. Deep Copy dalam Kamus Python: Bilakah `copy()` Gagal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!