Неизменяемые структуры данных могут быть полностью инициализированы их конструктором, или вы можете согласиться с необходимостью продолжать копировать структуру при изменении ее свойств.Таким образом, чтобы ответить на первую часть вопроса, вы загружаете данные в неизменяемую структуру данных, определяя конструктор, который принимает всю информацию в вашей базе данных, или гарантируете, что вам известны циклические подграфы:
Циклические данныеЯ думаю, что структуры не обязательно являются полностью циклическими.Если вы представляете сеть указателей, которую содержит один экземпляр / состояние, у вас может быть подграф, содержащий родительский и дочерний элементы, которые указывают друг на друга, но нет других циклических структур.В этом сценарии копирование экземпляра 1 для ленивого создания экземпляра 2 с другим родительским узлом (например) потребует копирования родительского и дочернего узлов, поскольку они образуют циклический подграф.Но ссылки, хранящиеся в дочернем элементе, отличном от родительского, могут по-прежнему быть ссылками на те же неизменяемые структуры, что и первый экземпляр.
Например, в моем классе House есть ссылка на дверь, окно и крышу.,Дверь имеет цвет и ссылку на дом, дом имеет размер, а крыша имеет шаг.Поэтому я создаю bobsHouse с зеленой дверью, большим окном и плоской крышей.Фактически, поскольку все они неизменяемы, теоретически существует только одно большое окно - все дома с большими окнами имеют одно и то же окно.Второй экземпляр, janesHouse, похож на bobsHouse, но с остроконечной крышей.Поэтому, если я скажу janesHouse = bobsHouse.withRoof (gabled), я должен получить новый экземпляр House, с новой (также зеленой) дверью и новой (gabled) крышей, но с тем же окном.
Так что, если janesHouse оценивается лениво, ему нужно только создать новый дом, если на него ссылаются Дверь или Крыша.Если запрашивается janesHouse.Window, ему вообще не нужно создавать новый дом - нужен только bobsHouse.
tl; dr: Вы можете иметь постоянные (ленивые) циклические структуры данных, но только если вы можете найти в них нециклические подграфы, то есть это не цепочка.