Під час читання документації на dict.copy()це йдеться про те, що вона робить дрібну копію словника. Те саме стосується книги, яку я переглядаю (Довідник Бізлі Пітона), де сказано:
Метод m.copy () робить дрібну копію елементів, що містяться в об’єкті відображення, і розміщує їх у новому об'єкті відображення.
Врахуйте це:
>>> 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}
Тому я припускав, що це оновить значення original(і додасть "c": 3) також, оскільки я робив дрібну копію. Як, якщо ви робите це для списку:
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
Це працює як очікувалося.
Оскільки обидві є дрібними копіями, чому це dict.copy()не працює так, як я очікую? Або моє розуміння дрібного та глибокого копіювання є помилковим?
![Ілюстрація 'a = b': 'a' і 'b' обидва вказують на '{1: L}', 'L' вказує на '[1, 2, 3]'.](https://i.stack.imgur.com/4AQC6.png)
![Ілюстрація 'b = a.copy ()': 'a' вказує на '{1: L}', 'b' вказує на '{1: M}', 'L' і 'M' вказують на '[ 1, 2, 3] '.](https://i.stack.imgur.com/Vtk4m.png)
![Ілюстрація 'b = copy.deepcopy (a)': 'a' вказує на '{1: L}', 'L' вказує на '[1, 2, 3]'; 'b' вказує на '{1: M}', 'M' вказує на інший екземпляр '[1, 2, 3]'.](https://i.stack.imgur.com/BO4qO.png)