Shallow copy ile deep copy arasındaki fark nedir?

Cevap

Python'da atama (b = a) kopya oluşturmaz; iki isim aynı nesneyi gösterir. Kopyalamanın iki seviyesi vardır:

  • Shallow copy: yeni bir dış kapsayıcı oluşturur, ama içindeki elemanlar aynı referanslardır.
  • Deep copy: iç içe tüm nesneleri özyinelemeli olarak kopyalar; tamamen bağımsız bir yapı üretir.
import copy

orijinal = [[1, 2], [3, 4]]
sig = copy.copy(orijinal)       # veya orijinal[:] / list(orijinal)
derin = copy.deepcopy(orijinal)

orijinal[0].append(99)

print(sig)    # [[1, 2, 99], [3, 4]]  -> iç liste paylaşılıyor
print(derin)  # [[1, 2], [3, 4]]      -> etkilenmedi
ShallowDeep
Dış kapsayıcıYeniYeni
İç nesnelerPaylaşılırKopyalanır
Hız / bellekHızlı, az bellekYavaş, daha çok bellek
Yöntemcopy.copy, list[:], dict.copy()copy.deepcopy

Notlar

  • İçerik yalnızca immutable nesnelerden (int, str, tuple of int) oluşuyorsa shallow copy yeterlidir.
  • deepcopy döngüsel referansları memo sözlüğüyle yönetir, sonsuz döngüye girmez.
  • Sınıflarda davranışı __copy__ ve __deepcopy__ ile özelleştirebilirsiniz.
  1. list ve tuple arasındaki fark nedir?KolayPythonBackend
  2. Varsayılan argüman olarak liste vermek neden tehlikelidir?OrtaPythonBackend
  3. Decorator nedir? Basit bir zamanlama decorator'ı yazın.OrtaPythonBackend
  4. Generator nedir, yield ne yapar?OrtaPythonBackend
  5. GIL nedir ve çoklu iş parçacığını nasıl etkiler?ZorPythonBackend
  6. async/await ve asyncio nasıl çalışır? Ne zaman thread veya process yerine tercih edilir?ZorPythonBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle