Выражение with
создает новый экземпляр, поэтому старый экземпляр будет по-прежнему существовать без изменений, в нем нет мутаций - это имеет смысл, учитывая намерение для работы с неизменяемыми данными.
Это не утечка памяти, если вы каким-то образом не сохраните старые экземпляры. Это может увеличить отток G C, но это не обязательно плохо, и выигрыш в простоте рассуждений, основанный на неизменности, часто может стоить этих затрат.
(Конечно, я предполагаю, что здесь есть потенциал для оптимизации со стороны компилятора, если компилятор сможет доказать, что старое значение не будет использоваться, но я сомневаюсь, что такая вещь реализована - но по крайней мере).
Edit:
Вот декомпиляция SharpLab (с некоторыми изменениями, чтобы заставить ее работать). Вы можете видеть, что это довольно простой материал, до которого он компилируется.