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
Mary-Kate Olsenasal
2024-11-24 04:36:14829semak imbas

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})

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

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

original = [1, 2, 3]
new = original

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

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)
Representation after deep copy:

original: |  {a: [1, 2, 3]}  |
c:        |  {a: [1, 2, 3]}  |

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!

Kenyataan:
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