Это не такая уж большая проблема, как любопытство.
В моем интерпретаторе на 64-битном Linux я могу выполнить
In [10]: np.int64 == np.int64
Out[10]: True
In [11]: np.int64 is np.int64
Out[11]: True
Великолепно, что бы я ожидал. Однако я нашел это странное свойство numpy.core.numeric module
In [19]: from numpy.core.numeric import _typelessdata
In [20]: _typelessdata
Out[20]: [numpy.int64, numpy.float64, numpy.complex128, numpy.int64]
Странно, почему numpy.int64 там дважды? Давайте исследуем.
In [23]: _typelessdata[0] is _typelessdata[-1]
Out[23]: False
In [24]: _typelessdata[0] == _typelessdata[-1]
Out[24]: False
In [25]: id(_typelessdata[-1])
Out[25]: 139990931572128
In [26]: id(_typelessdata[0])
Out[26]: 139990931572544
In [27]: _typelessdata[-1]
Out[27]: numpy.int64
In [28]: _typelessdata[0]
Out[28]: numpy.int64
О, они разные. Что здесь происходит? Почему существуют два np.int64?