Назад к вопросам
Junior
75
questionbank

Что такое поверхностное копирование?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Поверхностное копирование (shallow copy) создает новый сложный объект, но не создает копии вложенных в него объектов. Вместо этого копируются ссылки на вложенные объекты оригинального объекта.

Основные моменты:

  • Создает новую коллекцию (список, словарь, множество).
  • Элементы новой коллекции являются ссылками на те же объекты, что и элементы оригинальной коллекции.
  • Изменение вложенных объектов в одной копии отразится в другой.
  • Изменение самой коллекции (добавление/удаление элементов) в одной копии не повлияет на другую.

Реализации:

  • Метод .copy() для списков, словарей, множеств.
  • Функция copy.copy() из модуля copy.
  • Метод среза [:] для списков.
# Пример с списком
original_list = [[1, 2], 3]
shallow_copy_list = original_list.copy()

print(f"Оригинал: {original_list}")
print(f"Поверхностная копия: {shallow_copy_list}")
print(f"Идентичность вложенных списков: {original_list[0] is shallow_copy_list[0]}") # True - ссылки одинаковы

original_list[0][0] = 99 # Изменяем вложенный список

print(f"Оригинал после изменения: {original_list}")
print(f"Поверхностная копия после изменения: {shallow_copy_list}") # Изменение видно в обеих копиях

original_list.append(4) # Изменяем саму коллекцию

print(f"Оригинал после append: {original_list}")
print(f"Поверхностная копия после append: {shallow_copy_list}") # Изменение только в оригинале
# Пример с copy.copy()
import copy

original_dict = {'a': [1, 2], 'b': 3}
shallow_copy_dict = copy.copy(original_dict)

print(f"Оригинал: {original_dict}")
print(f"Поверхностная копия: {shallow_copy_dict}")
print(f"Идентичность вложенных списков: {original_dict['a'] is shallow_copy_dict['a']}") # True

original_dict['a'][0] = 99 # Изменяем вложенный список

print(f"Оригинал после изменения: {original_dict}")
print(f"Поверхностная копия после изменения: {shallow_copy_dict}") # Изменение видно в обеих копиях