Cython: (Why / When) Is it preferable to use Py_ssize_t for indexing?

Py_ssize_t is signed. See PEP 353, where it says “A new type Py_ssize_t is introduced, which has the same size as the compiler’s size_t type, but is signed. It will be a typedef for ssize_t where available.”

You should use Py_ssize_t for indexing. I didn’t find a definitive statement of this in the Cython docs, but Stefan Behnel, a Cython developer, said as much in an email (https://groups.google.com/forum/#!topic/cython-users/brENF_M9zxM):

As a general remark, you are using ints as indices. You should
use the Py_ssize_t type instead (or size_t, if you prefer an
unsigned type) to properly accommodate for 64 bit architectures.

Leave a Comment