Прежде чем углубляться в метод 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 не повлияют на исходный словарь, и наоборот.

Выход:

Метод копирования словаря в 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 ссылаются на одни и те же объекты.

Выход:

Метод копирования словаря в примере Python

Ограничения метода copy()

Основное ограничение метода copy() словаря Python заключается в том, что он создает поверхностные копии. Если наш словарь Python содержит изменяемые объекты, такие как списки или другие словари, метод copy() не будет создавать независимые копии этих объектов.

Вместо этого и исходный, и скопированный словари Python по-прежнему будут ссылаться на одни и те же изменяемые объекты. Итак, чтобы избежать этого, нам нужно создать глубокую копию словаря Python.

Чтобы создать глубокую копию, которая создает независимые копии всех объектов в исходном словаре, мы можем использовать функцию deepcopy() модуля копирования Python.

import copy

deep_copied_dictionary = copy.deepcopy(original_dictionary)

Заключение

Метод copy() словаря Python — это удобная встроенная функция для создания поверхностных копий словарей в Python. Это позволяет нам создать новый словарь с теми же парами ключ-значение, что и исходный, не затрагивая исходный словарь.

Добавить комментарий