Из связанной документации :
Возвращает (...) целое (или длинное целое)
В Python 2.x на amd64 длинное целое число представляет собой целое число больше 64 бит. В любом случае, в Python целые числа не ограничены. Следовательно, id
может возвращать произвольно длинные значения .
Если вам необходимо знать определенное максимальное значение, вы можете предположить, что доступная память на вашей платформе является верхней границей размера целого числа, которое вы получаете. Поэтому я бы указал 2 2 32 для 32-разрядных и 2 2 64 для 64 архитектур. Поэтому в случае реализации Python x86 можно с достаточной уверенностью установить верхнюю границу 2 2 32 .
cpython (самая популярная реализация python) действительно возвращает адреса памяти (builtin_id
в Python/bltinmodule.c
):
static PyObject * builtin_id(PyObject *self, PyObject *v) {
return PyLong_FromVoidPtr(v);
}
Это будет 32-битное / 64-битное значение, но поведение - это подробности реализации , как явно указано в документации. По определению, программист не должен полагаться на детали реализации.
Я сильно сомневаюсь, что существует законный вариант использования идентификаторов, а тем более перенос их в другую программу. Вместо этого вы должны использовать пользовательскую таблицу объектов или просто передать набор. Если вы намереваетесь использовать Python вместе с C #, ironpython позволяет вам делать это в том же коде.