Назад к вопросам
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}") # Изменение видно в обеих копиях