Прежде чем углубляться в метод copy() словаря Python, важно понять концепцию неглубоких копий. Неполная копия — это новый объект, который является копией исходного объекта с новой ссылкой.
Он называется «мелким», потому что создает новую ссылку только на исходный объект, а не на объекты внутри исходного объекта.
Метод copy() — это встроенный метод класса словаря в Python, который позволяет нам создавать неполную копию словаря.
Синтаксис:
copied_dictionary = original_dictionary.copy()
Примеры
Давайте углубимся в несколько примеров, чтобы лучше понять метод copy() в действии:
Пример №1: базовое использование
# Creating an original dictionary original_dictionary = {"name": "John", "age": 30, "city": "New York"} # Creating a shallow copy using the copy() method copied_dictionary = original_dictionary.copy() print("Original Dictionary:", original_dictionary) print("Copied Dictionary:", copied_dictionary)
Как мы видим, метод copy() создает новый словарь Python с теми же парами ключ-значение, что и исходный. Однако, поскольку это неполная копия, любые изменения в скопированном словаре Python не повлияют на исходный словарь, и наоборот.
Выход:
Пример №2. Неглубокое копирование с вложенными изменяемыми объектами.
# Importing the copy module for deep copy import copy # Creating an original dictionary with nested mutable objects original_dictionary = { "name": "Alice", "age": 28, "hobbies": ["reading", "travelling"], "address": {"city": "San Francisco", "state": "California"} } # Creating a shallow copy using the copy() method shallow_copied_dictionary = original_dictionary.copy() # Modifying the copied dictionary shallow_copied_dictionary["age"] = 29 shallow_copied_dictionary["hobbies"].append("cooking") shallow_copied_dictionary["address"]["city"] = "Los Angeles" print("Original Dictionary:", original_dictionary) print("Shallow Copied Dictionary:", shallow_copied_dictionary)
- В этом примере мы создаем словарь Python, который включает вложенные изменяемые объекты. Словарь содержит такие ключи, как «имя», «возраст», «хобби» и «адрес». Значением для «хобби» является список Python (который является изменяемым), а значением для «адреса» является другой словарь Python (также изменяемый).
- Затем мы создаем неглубокую копию исходного словаря Python с помощью метода copy(). При этом создается новый словарь Python, который ссылается на те же объекты, что и исходный словарь.
- Когда мы изменяем ключ «age» скопированного словаря, это не влияет на исходный словарь Python, поскольку значение «age» является целым числом, которое является неизменяемым.
- Однако когда мы изменяем ключи «хобби» и «адрес», это также влияет на исходный словарь Python. Это связано с тем, что эти ключи указывают на изменяемые объекты (список и словарь), а исходный и скопированный словари Python ссылаются на одни и те же объекты.
Выход:
Ограничения метода copy()
Основное ограничение метода copy() словаря Python заключается в том, что он создает поверхностные копии. Если наш словарь Python содержит изменяемые объекты, такие как списки или другие словари, метод copy() не будет создавать независимые копии этих объектов.
Вместо этого и исходный, и скопированный словари Python по-прежнему будут ссылаться на одни и те же изменяемые объекты. Итак, чтобы избежать этого, нам нужно создать глубокую копию словаря Python.
Чтобы создать глубокую копию, которая создает независимые копии всех объектов в исходном словаре, мы можем использовать функцию deepcopy() модуля копирования Python.
import copy deep_copied_dictionary = copy.deepcopy(original_dictionary)
Заключение
Метод copy() словаря Python — это удобная встроенная функция для создания поверхностных копий словарей в Python. Это позволяет нам создать новый словарь с теми же парами ключ-значение, что и исходный, не затрагивая исходный словарь.