В случае Clojure они не воссоздаются каждый раз.Рич Хики позаботился о том, чтобы использовать постоянные структуры данных , как он объясняет в «Эксперте-эксперту» интервью .
Вы можете думать об этом больше как о связанном списке.
class LinkedList<E> {
E data;
LinkedList<E> next;
LinkedList<E> cons(E item) {
return new LinkedList(item, this);
}
}
Каждый раз, когда вы cons
выводите значение на передний план, вам не нужно создавать новый связанный список, но вместо этого вы просто сохраняете ссылку на предыдущий.
Аналогично,даже структуры данных, такие как карты, могут делиться большими объемами своих данных, когда они отличаются лишь незначительными объемами.Это помогает уменьшить используемый размер.
Кроме того, Clojure также предоставляет временные структуры данных , которые являются изменчивыми версиями его неизменяемых коллекций, позволяя вносить многочисленные изменения в структуру данных без затраткопирования / обмена данными.