ProgramlamaPython Geliştiricisi

Python'da shallow copy ve deep copy arasındaki farkı açıklayın. İç içe veri yapıları nasıl doğru bir şekilde kopyalanır? Copy modülü nasıl çalışır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Python'da nesnelerin kopyalanması yüzeysel (shallow copy) ve derin (deep copy) olarak iki şekilde gerçekleşebilir. Yüzeysel kopya yeni bir kap oluşturur, ancak iç içe nesneler kopyalanmaz, aynı nesnelere referanslar kullanılır. Derin kopya, tüm iç içe nesnelerin yeni kopyalarını oluşturur ve kopyaların bağımsızlığını sağlar.

copy modülü copy() (shallow copy) ve deepcopy() (deep copy) yöntemlerini sağlar:

import copy original = [[1, 2], [3, 4]] shallow = copy.copy(original) deep = copy.deepcopy(original) shallow[0][0] = 99 print(original) # [[99, 2], [3, 4]] ← orijinal nesne değişti! deep[1][1] = 42 print(original) # [[99, 2], [3, 4]] - değişmedi

Kandırmaca Soru.

list2 = list1 operatörü ile copy.copy(list1) kullanımı arasındaki fark nedir?

Cevap: list2 = list1 operatörü, aynı nesneye yeni bir referans oluşturur. copy.copy(list1) yüzeysel bir kopya yaparak yeni bir liste nesnesi oluşturur, ancak aynı iç nesneleri kullanır. İç içe yapılar için yüzeysel kopya yeterli değildir - derin kopya gereklidir.

Konunun inceliklerini bilmemekle ilgili gerçek hata örnekleri.


Hikaye

REST API geliştirilirken, şablondan veriler sıradan bir atama ile kopyalanıyordu (data = template). Sonraki istek, aynı referans kullanıldığı için "şablon"u tüm sonraki kullanıcılar için yanlışlıkla değiştirdi.


Hikaye

Raporlama modülünde veriler copy.copy() ile kopyalanıyordu, oysa yapı iç içe (sözlüklerde listeler) idi. Kopyadaki değişiklikler beklenmedik bir şekilde orijinal verilere yansıdı ve istatistiklerde hatalara neden oldu.


Hikaye

Bir bankacılık projesinde, copy.copy() ile hatalı bir iç içe nesnenin kopyalanması (değil deepcopy()) işlem geçmişinin kaybolmasına neden oldu - yeni işlemler eski işlemleri üst üste yazdı çünkü iç elemanlar ortak kullanılıyordu.