Насчёт zval и списков - тип один HashMap. Сам zval объявлен как union - содержит в себе все типы данных, все что не скаляр - указателем лежит. В итоге размер не увеличится если в список что-либо добавить, но сломается совместимость на уровне структур. Обьекты, строки, массивы в виде указателей стали хранить хитро вместе с самими значениями (они лежат сразу рядом), используя structure-хаки и оффсеты