Shallow vs. Deep Copy dalam Kamus Python: Bilakah `copy()` Gagal?

Mary-Kate Olsen
Lepaskan: 2024-11-22 20:20:13
asal
192 orang telah melayarinya

Shallow vs. Deep Copy in Python Dictionaries: When Does `copy()` Fail?

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

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

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

Jenis Operasi Salin:

  1. Tugasan Rujukan (a = b): Kedua-dua pembolehubah menunjuk kepada yang sama objek.
  2. Salinan Cetek (b = a.copy()): Asingkan objek, tetapi data asas dikongsi.
  3. Deep Copy (b = copy .deepcopy(a)): Terpencil sepenuhnya, dengan struktur dan nilai yang berbeza.

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!

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