我希望使用Cython来减少数百万次存储在Python字典中的数据结构的内存需求。现在,我已经在pyx文件中将其实现为简单的Cython类:
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)
与使用namedtuple或其他Python解决方案相比,这可以节省大量内存,因为我的实际类存储6个整数,因此需要40字节的内存(PyObject_Head为6 * 4 + 16字节)。但是,这16个字节的开销是巨大的,我的问题是是否有更好的方法来做到这一点。我的理解是,我无法直接公开C结构,因为它将被类型转换为需要更多内存的Python字典。 python_dict字典在我的主要Python代码中广泛使用。有没有一种方法可以避免PyObject_Head的开销,而不必将很多实现转移到纯Cython / C上?