константа пула в python различает малый целочисленный пул и большой целочисленный пул, а малый целочисленный пул находится в диапазоне [-5, 257); и другие целые числа в большом целочисленном пуле. В Cython if определяет связанный список для хранения этих данных, где выборка данных становится очень удобной и быстрой.
# ifndef NSMALLPOSINTS
# define NSMALLPOSINTS 257
# endif
# ifndef NSMALLNEGINTS
# define NSMALLNEGINTS 5
# endif
# if NSMALLPOSINTS + NSMALLNEGINTS > 0
static PyIntObject * small_ints[NSMALLPOSINTS + NSMALLNEGINTS];
# endif
Кстати: целое число 257 может быть незнакомым; если два объекта, которые имеют одинаковые значения, находятся в одном и том же поле, их адрес может быть или не совпадать, это зависит от контекста процесса; тогда как, если они находятся в разных полях, их адреса должны быть разными
и, кстати, в соответствии с типом строки, Cython также обеспечивает постоянный пул, что длина строки должна быть одна, тогда как это может быть не тот же объект
a = str(11)
b = str(11)
print a == b # True
print a is b # False
c = str("A")
d = str("A")
print c == d # True
print c is d # True
aa = 12
bb = 12
print aa == bb # True
print aa is bb # True
cc = 333
dd = 333
print cc == dd # True
print cc is dd # False
Сравнивая их адреса, прозрачно получаю передовые решения