Вопрос проверяет знание механизма экономии памяти при копировании переменных в PHP.
Copy-on-write — это механизм, при котором PHP не копирует данные при присваивании переменной другой переменной. Копирование выполняется только тогда, когда одна из переменных пытается изменить общее значение. Пока данные неизменяемы — обе переменные указывают на один и тот же блок памяти. Это снижает нагрузку на память и ускоряет выполнение кода. Сам факт изменения становится триггером реального копирования.
Copy-on-write (COW) позволяет PHP эффективно работать с памятью, избегая лишних копирований.
Определение: Copy-On-Write — это стратегия, при которой копирование значения происходит только при попытке его изменить.
Когда вы пишете:
php
$a = [1, 2, 3];
$b = $a;
Происходит следующее:
у zval увеличивается refcount
данные не копируются
$a и $b используют один и тот же массив
Копия создаётся только если необходимо изменить данные:
php
$b[] = 4; // значение копируется только теперь
Теперь $a и $b независимы.
экономия памяти
ускорение выполнения
отсутствие необходимости вручную управлять памятью
Этот механизм лежит в основе копирования любых сложных структур: массивов, объектов (до PHP 7), строк.
Copy-on-write является ключевым элементом внутренней оптимизации PHP, и важно понимать его при работе с большими структурами данных.