Ответ
Copy on write (CoW) — это оптимизация, при которой копирование данных происходит только при изменении. До модификации объекты ссылаются на одни и те же данные.
Пример с slices в Go:
a := []int{1, 2, 3}
b := a // копирования нет, оба слайса ссылаются на один массив
b[0] = 42 // теперь происходит копирование (если capacity позволяет)
fmt.Println(a) // [1 2 3]
fmt.Println(b) // [42 2 3]
Основные преимущества:
- Экономия памяти при неизменяемых данных
- Ускорение операций копирования
- Позволяет реализовать "ленивое" копирование
В Go явной поддержки CoW нет, но похожее поведение можно наблюдать у слайсов и строк (которые иммутабельны).