Я собираюсь использовать Cython для уменьшения требований к памяти для структуры данных, которая хранится в словаре Python в миллионы раз.Прямо сейчас я реализовал это как простой класс Cython в файле pyx:
cdef class FooBar:
cdef public int x
cdef public int y
def __init__(self, x, y):
self.x = x
self.y = y
Я использую это в другом файле pyx для заполнения словаря Python с миллионами ключей:
python_dict[key] = FooBar(x, y)
Это обеспечивает значительную экономию памяти по сравнению с использованием именованного кортежа или другого решения Python, поскольку мой настоящий класс хранит 6 целых чисел и, таким образом, требует 40 байтов памяти (6 * 4 + 16 байтов для PyObject_Head).Тем не менее, 16-байтовые издержки являются существенными, и мой вопрос заключается в том, есть ли лучший способ сделать это.Насколько я понимаю, я не могу напрямую представить структуру C, поскольку это будет приведение типов к словарю Python, требующему гораздо больше памяти.Словарь python_dict широко используется в моем основном коде Python.Есть ли способ избежать издержек PyObject_Head без необходимости перенести большую часть реализации на чистый Cython / C?