use PyMem_* instead malloc