Rumah > pembangunan bahagian belakang > Tutorial Python > Shallow vs. Deep Copy dalam Kamus Python: Mengapa `copy()` Tidak Mengemas kini Yang Asal?

Shallow vs. Deep Copy dalam Kamus Python: Mengapa `copy()` Tidak Mengemas kini Yang Asal?

Mary-Kate Olsen
Lepaskan: 2024-11-24 04:36:14
asal
842 orang telah melayarinya

Shallow vs. Deep Copy in Python Dictionaries: Why Doesn't `copy()` Update the Original?

Memahami Penyalinan Cetek dan Mendalam: Mengapa Kamus Shallow Copy Tidak Mengemas kini Asal

Apabila bekerja dengan struktur data dalam Python, adalah penting untuk memahami perbezaan antara penyalinan cetek dan mendalam. Penyalinan cetek mencipta rujukan baharu kepada struktur data asal, manakala penyalinan mendalam mencipta struktur data baharu sepenuhnya dengan kandungan terpencil.

Mari kita periksa gelagat penyalinan cetek dalam kamus. Dalam contoh yang disediakan:

original = dict(a=1, b=2)
new = original.copy()
new.update({'c': 3})
Salin selepas log masuk

Memanggil copy() pada kamus asal mencipta objek pemetaan baharu, baharu, yang merujuk kandungan yang sama seperti asal. Ini dikenali sebagai penyalinan cetek. Apabila baharu dikemas kini dengan {'c': 3}, hanya baharu terjejas. Kedua-dua rujukan asal dan baharu adalah struktur data asas yang sama.

Representation after shallow copy:

original: |  {a: 1, b: 2}   |
new:     |  {a: 1, b: 2}   |
Salin selepas log masuk

Walau bagaimanapun, apabila cetek menyalin struktur data boleh ubah, seperti senarai:

original = [1, 2, 3]
new = original
Salin selepas log masuk

Mengubah suai senarai baharu (baharu. append(4)) mengubah suai senarai asal (asal) juga.

Representation after shallow copy for lists:

original: |  [1, 2, 3]  |
new:     |  [1, 2, 3]  |
Salin selepas log masuk

Perbezaan utama antara penyalinan cetek dan mendalam terletak pada cara mereka mengendalikan struktur data bersarang. Penyalinan dalam secara rekursif menyalin semua kandungan mengikut nilai, mewujudkan struktur data terpencil sepenuhnya:

import copy
c = copy.deepcopy(a)
Salin selepas log masuk
Representation after deep copy:

original: |  {a: [1, 2, 3]}  |
c:        |  {a: [1, 2, 3]}  |
Salin selepas log masuk

Ringkasnya, penyalinan cetek merujuk kepada struktur data asal, manakala penyalinan mendalam mencipta struktur terpencil yang sepenuhnya baharu. Perbezaan ini menjadi sangat penting apabila mengubah suai struktur data boleh ubah.

Atas ialah kandungan terperinci Shallow vs. Deep Copy dalam Kamus Python: Mengapa `copy()` Tidak Mengemas kini Yang Asal?. 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