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| Shallow | Deep | |
|---|---|---|
| Dış kapsayıcı | Yeni | Yeni |
| İç nesneler | Paylaşılır | Kopyalanır |
| Hız / bellek | Hızlı, az bellek | Yavaş, daha çok bellek |
| Yöntem | copy.copy, list[:], dict.copy() | copy.deepcopy |
Notlar
- İçerik yalnızca immutable nesnelerden (int, str, tuple of int) oluşuyorsa shallow copy yeterlidir.
deepcopydöngüsel referanslarımemosözlüğüyle yönetir, sonsuz döngüye girmez.- Sınıflarda davranışı
__copy__ve__deepcopy__ile özelleştirebilirsiniz.
İlgili Python soruları
- list ve tuple arasındaki fark nedir?
- Varsayılan argüman olarak liste vermek neden tehlikelidir?
- Decorator nedir? Basit bir zamanlama decorator'ı yazın.
- Generator nedir, yield ne yapar?
- GIL nedir ve çoklu iş parçacığını nasıl etkiler?
- async/await ve asyncio nasıl çalışır? Ne zaman thread veya process yerine tercih edilir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.