Пишу критичное по памяти и производительности приложение. Для некоторых повторящихся вычислений задекорировал функции с использованием техники memoization. Крупные неоднократно повторяющиеся объекты храню в таком кеше:
from collections import defaultdict
from itertools import count
cache = defaultdict(count().next)
Таким образом, каждый добавлемый в кеш объект получает уникальный последовательный индекс, т.е. в словаре уникальны не только ключи, но и значения. После окончания вычислений требуется восстановить объекты из кеша по индексу, для чего нужно инвертировать словарь. Он занимает сотни мегабайт, поэтому я ищу способ такого инвертирования cache -> xcache, которое не удваивало бы объём данных в памяти. Я хочу удалять элемент из одного словаря и сразу добавлять в другой, чтобы данные плавно "перетекли". Другими словами, в памяти не должны одновременно находиться два словаря с полным набором ключей и значений в каждом. Основная возникающая проблема - итерация по изменяющемуся словарю. Как это правильно реализовать?