Наиболее разумно проанализировать выражение, подобное этому, изнутри:
In [189]: np.int64(42)
Out[189]: 42
In [190]: type(_)
Out[190]: numpy.int64
In [191]: np.int64(42).data
Out[191]: <memory at 0x7f7dc41a82e8>
In [192]: type(_)
Out[192]: memoryview
In [193]: np.int64(42)
Out[193]: 42
In [194]: type(_)
Out[194]: numpy.int64
In [195]: np.int64(42).data
Out[195]: <memory at 0x7f7dcc05cac8>
In [196]: type(_)
Out[196]: memoryview
In [197]: bytes(np.int64(42).data)
Out[197]: b'*\x00\x00\x00\x00\x00\x00\x00'
In [198]: len(_)
Out[198]: 8
Возможно, имеет смысл рассмотреть массив с одним или несколькими элементами:
In [204]: np.array(42)
Out[204]: array(42)
In [205]: _.dtype
Out[205]: dtype('int64')
In [206]: np.array(42).data
Out[206]: <memory at 0x7f7dcc054780>
In [207]: bytes(np.array(42).data)
Out[207]: b'*\x00\x00\x00\x00\x00\x00\x00'
In [208]: bytes(np.array([42,43]).data)
Out[208]: b'*\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00'
Объект массива имеет атрибуты и databuffer
. Этот буфер хранит данные, в данном случае в виде 8-байтового целого числа для каждого элемента. bytes(...data)
просто создает представление буфера для этой строки.
То же самое с методом tobytes
:
In [209]: np.array([42,43]).tobytes()
Out[209]: b'*\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00'