Под "мелким копированием" подразумевается, что содержимое словаря не копируется по значению, а просто создает новую ссылку.
>>> a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
В отличие от глубокого копированияскопируйте все содержимое по значению.
>>> import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})
Итак:
b = a
: присвоение ссылки, Make a
и b
указывает на один и тот же объект.
b = a.copy()
: мелкое копирование, a
и b
станут двумя изолированными объектами, но их содержимое по-прежнему будет иметь одну и ту же ссылку
b = copy.deepcopy(a)
: Глубокое копирование, структура и содержимое a
и b
становятся полностью изолированными.