İçin belgeleri okurken dict.copy(), sözlüğün sığ bir kopyasını yaptığını söylüyor. Aynı şey takip ettiğim kitap için de geçerli (Beazley'in Python Referansı):
M.copy () yöntemi, bir eşleme nesnesinde bulunan öğelerin sığ bir kopyasını oluşturur ve bunları yeni bir eşleme nesnesine yerleştirir.
Bunu düşün:
>>> original = dict(a=1, b=2)
>>> new = original.copy()
>>> new.update({'c': 3})
>>> original
{'a': 1, 'b': 2}
>>> new
{'a': 1, 'c': 3, 'b': 2}
Bu yüzden originalsığ bir kopya yaptığımdan beri bunun değerini güncelleyeceğini varsaydım (ve 'c': 3'ü ekleyeceğim). Bir liste için yaparsanız:
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
Bu beklendiği gibi çalışır.
Her ikisi de sığ kopyalar olduğundan, neden dict.copy()beklediğim gibi çalışmıyor? Ya da sığ ve derin kopyalama anlayışım kusurlu mu?
!['A = b': 'a' ve 'b' örneklerinin her ikisi de '{1: L}', 'L' '[1, 2, 3]' yi gösterir.](https://i.stack.imgur.com/4AQC6.png)
!['B = a.copy ()': 'a', '{1: L}' işaretini gösterir, 'b' '{1: M}', 'L' ve 'M' işaretini her ikisi de '[ 1, 2, 3] '.](https://i.stack.imgur.com/Vtk4m.png)
!['B = copy.deepcopy (a)': 'a', '{1: L}', 'L', '[1, 2, 3]' yi gösterir; 'b', '{1: M}', 'M' ise farklı bir '[1, 2, 3]' örneğini gösterir.](https://i.stack.imgur.com/BO4qO.png)