При чтении документации для dict.copy() в ней говорится, что она делает мелкую копию словаря. То же самое касается книги, которую я слежу (ссылка Beazley Python Reference), в которой говорится:
Метод 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() работает не так, как я ожидаю? Или мое понимание мелкого и глубокого копирования ошибочно?

![Illustration of 'a = b': 'a' and 'b' both point to '{1: L}', 'L' points to '[1, 2, 3]'.](/img/64bd23ef742e4d94989d6dbf48a88df3.png)
![Illustration of 'b = a.copy()': 'a' points to '{1: L}', 'b' points to '{1: M}', 'L' and 'M' both point to '[1, 2, 3]'.](/img/35bffda1642e01c36e773fd408267a50.png)
![Illustration of 'b = copy.deepcopy(a)': 'a' points to '{1: L}', 'L' points to '[1, 2, 3]'; 'b' points to '{1: M}', 'M' points to a different instance of '[1, 2, 3]'.](/img/687332903155b7c734246f459355a8be.png)