Что это такое
Паттерн Прототип (Prototype) создаёт новые объекты, клонируя уже существующий, а не собирая их с нуля. Вы готовите один объект как шаблон, затем копируете его и меняете только то, что отличается.
Главное, что нужно сделать правильно в Python: поверхностная копия (copy.copy) использует общие списки и словари внутри объекта — copy.deepcopy копирует и их, поэтому клон становится по-настоящему независимым.
Пример: шаблон документа
Шаблон содержит части, которые повторяются в каждом документе. clone() использует copy.deepcopy — вместе со списком тегов, — поэтому изменение копии не затрагивает шаблон.
Клонируем, затем меняем отличия
Отчёт получил новый заголовок и дополнительный тег, а у шаблона по-прежнему только ['draft'] — потому что copy.deepcopy скопировал список тегов. Поверхностная копия copy.copy сделала бы этот список общим, и шаблон тоже изменился бы.
Вывод: полная программа на Python
import copy
from dataclasses import dataclass, field
@dataclass
class Document:
title: str
footer: str
tags: list[str] = field(default_factory=list)
# clone копирует документ — вместе со списком тегов.
def clone(self) -> "Document":
return copy.deepcopy(self)
template = Document(
title="Untitled",
footer="PromptCookbook 2026",
tags=["draft"],
)
report = template.clone()
report.title = "Yearly Report"
report.tags.append("finance")
print("шаблон:", template.title, template.tags)
print("клон: ", report.title, report.tags)
Когда использовать
Используйте его, когда новые объекты в основном являются копиями заранее подготовленного — документы из шаблона, игровые сущности из генератора, тестовые данные из фикстуры.
Не используйте его, когда объекты дёшево создавать заново или в них нет ничего общего. Для плоского объекта из простых значений поверхностная копия copy.copy уже является полной копией.
Плюсы и минусы
Плюсы: дешёвое создание заранее настроенных объектов; шаблон наглядно показывает значения по умолчанию; нет повторяющегося кода настройки.
Минусы: при копировании легко допустить незаметную ошибку — поверхностная копия не в том месте тихо связывает клон и оригинал через общий список или словарь; со временем клоны незаметно расходятся с шаблоном.