Это очень интересный прикол с массивами в PHP, если о нём не знать заранее, можно сломать голову на поиск ошибки, если с ним столкнуться.
$arr = array(
'a' => 1,
'b' => 1,
);
$ref= &$arr['b']; // $ref ссылается на те же данные, что и $arr['b']
$copy = $arr; // $copy должен содержать независимую копию массива $arr
$copy['b'] = 'X'; // $arr не должен быть изменён
print_r($arr); // $arr( 'a' => 1, 'b' = 'X' ) $arr изменён, ёлки-палки
unset($ref); // Удаляем постороннюю ссылку
$copy = $arr;
$copy['b'] = 'Y'; // Измениться ли $arr?
print_r($arr); // $arr( 'a' => 1, 'b' = 'X' ) - Нет
Как я понял, если существует хотя бы одна переменная, которая ссылается на те же данные, что и некоторый элемент массива, то этот элемент массива всегда будет копироваться «по ссылке», когда копируется сам массив. Если же удалить эту постороннюю переменну-ссылку (в примере выше это $ref), то элемент массива начинает копироваться как должен.