Копирование словаря в Python: Полное руководство
В этом руководстве вы узнаете все различные способы копирования словаря Python. Хотя это может показаться очень элементарной задачей, в этом есть ряд сложностей. В этом руководстве вы узнаете, как копировать словарь по ссылке, создавать поверхностные копии и глубокие копии.
К концу этого учебного пособия, вы будете хорошо понимать:
Различные способы копирования словарей в Python
В чем разница между ссылками, поверхностными и глубокими копиями
Когда вы можете использовать каждый из различных методов для копирования словарей Python
Оглавление
Быстрый ответ: скопируйте словарь Python
Если у вас мало времени, вот краткий ответ на то, как копировать словарь в Python. Эти пункты подробно рассмотрены в разделах ниже:
=
Оператор
Создает указатель на исходный словарь
.copy()
Метод
Создает поверхностную копию словаря
deepcopy()
Функция
Создает глубокую копию словаря
Краткий обзор словарей Python
Перед тем как углубиться в то, как копировать словари в Python, давайте быстро рассмотрим, что такое словари в Python. Словари в Python - это упорядоченный тип данных, где данные хранятся в виде пар key:value
Думайте о ключах словаря как о словах в словарях, где значения - это определения. Ключи словаря должны быть уникальными и неизменяемыми. Значения словаря, тем временем, могут дублироваться и содержать изменяемые типы данных, такие как списки.
Давайте посмотрим, как мы можем создать словарь в Python:
Как скопировать словарь Python с помощью оператора =
Когда мы пытаемся скопировать словарь с помощью оператора =
, может показаться, что мы создаем копию словаря. Однако, на самом деле, мы лишь создаем ссылку на оригинальный словарь. Фактически, мы только присваиваем тот же самый словарь второй переменной.
Посмотрим, как это выглядит:
Мы можем подтвердить, что это на самом деле не копирует словарь, используя функцию id()
. Она покажет нам, где в памяти хранятся данные:
В следующем разделе вы узнаете, как создать копию словаря с помощью метода .copy()
Как скопировать словарь Python с помощью копирования
Самый простой способ создать копию словаря в Python — использовать метод .copy()
. Этот метод возвращает поверхностную копию словаря. Давайте разберем, что означает поверхностная копия:
При поверхностном копировании дублируется как можно меньше данных.
Это означает, что элементы создаются как ссылки на оригинальные элементы.
Когда изменяются примитивные типы данных (например, целые числа и строки), связь с исходным словарём разрывается.
При изменении не примитивных типов данных значения изменяются в обоих местах.
Посмотрим, как это выглядит на практике, используя наш приведённый выше словарь:
Мы видим, что словарь был успешно скопирован. Давайте посмотрим, что произойдет, если мы изменим элемент в скопированном словаре. Изменим значение ключа b
в нашем скопированном словаре:
Мы видим, что используя метод .copy()
, мы смогли изменить значение в новом словаре, сохраняя старое значение неизменным. В приведенном выше примере мы использовали f-строки для вывода наших словарей. Эта функция доступна в Python 3.8 и выше.
Давайте посмотрим, что произойдет, когда мы изменим значение списка в нашей скопированной словаре:
Мы видим, что при изменении значения непримитивного типа данных (например, списка), значение в оригинальном словаре также изменилось.
Это происходит потому, что когда мы использовали метод .copy()
для создания копии словаря, мы создали неглубокую копию. Это означает, что элементы копировались лениво, пытаясь дублировать как можно меньше.
В следующем разделе вы узнаете, как создать глубокую копию, чтобы гарантировать полное разрывание этих ассоциативных связей.
Как глубоко скопировать словарь Python
Если мы хотим создать дубликат словаря, который разрывает все связи с оригиналом, мы можем создать глубокую копию словаря. Для этого сначала нужно импортировать модуль copy
, который содержит функцию deepcopy()
.
Давайте посмотрим, как мы можем использовать эту функцию для создания глубокой копии словаря:
Теперь давайте посмотрим, что происходит, когда мы изменяем сложный тип данных в нашем словаре:
Когда мы создаем глубокую копию, мы создаем совершенно новый объект, который копирует этот словарь в этот момент времени.
Заключение
В этом руководстве вы научились копировать словарь Python. Вы узнали о различиях между созданием копии с помощью оператора =
, метода .copy()
и функции deepcopy()
. Вы узнали, как поверхностные копии создают ленивые копии. Тем временем, глубокие копии дублируют все в словаре и разрывают все ассоциативные связи со словарем.
Дополнительные ресурсы
Чтобы узнать больше о связанных темах, ознакомьтесь с учебными материалами ниже:
Словари Python: полный обзор
Python: добавить пару «ключ: значение» в словарь
Слияние словарей Python – объединение словарей (7 способов)
Python Defaultdict: обзор и примеры
Last updated