Читая документацию для dict.copy(), он говорит, что делает мелкую копию словаря. То же самое касается книги, которой я следую (Справочник Бизли по Python), в которой говорится:
Метод 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)