Мы проверяем, оставляет ли один из наших пакетов объекты мусора в Python g c, и обнаружили, что объекты collections.OrderedDict
не удаляются механизмом ref-count, а помещаются в G C, с следующие ссылки (когда pprint'ing их и немного подправил вывод):
<type 'list'> object at 0x10a876ab8:
[ <Recursive reference to list object at 0x10a876ab8>,
<Recursive reference to list object at 0x10a876ab8>,
None]
Это похоже на проблему, описанную в https://bugs.python.org/issue9825. Эта проблема была исправлена в Python 3.2, и действительно, показанный выше эталонный цикл появляется в Python 2.7, но не в Python 3.7.
Существует ли альтернатива collections.OrderedDict
, свободная от повторного цикла? для Python 2,7?
Обновление:
Я обнаружил, что ordereddict.OrderedDict
также имеет тот же опорный цикл.
Я полностью осознаю, что Python 2.7 не поддерживается. Тем не менее, нам все еще нужно поддерживать наш пакет на Python 2.7.
Ответ @Ramsha Siddiqui указывает на SortedDict Django. Я проверил, что в Django 1.7 его SortedDict не имеет контрольных циклов. Однако SortedDict был удален из Django (по крайней мере, в его версии 1.11).