2.2.1.2 内存块
In [5]:
x = np.array([1, 2, 3, 4], dtype=np.int32)
x.data
Out[5]:
<read-write buffer for 0x105ee2850, size 16, offset 0 at 0x105f880f0>
In [6]:
str(x.data)
Out[6]:
'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00'
数据的内存地址:
In [7]:
x.__array_interface__['data'][0]
Out[7]:
4352517296
完整的array_interface
:
In [8]:
x.__array_interface__
Out[8]:
{'data': (4352517296, False),
'descr': [('', '<i4')],
'shape': (4,),
'strides': None,
'typestr': '<i4',
'version': 3}
提醒:两个ndarrays
可以共享相同的内存:
In [9]:
x = np.array([1, 2, 3, 4])
y = x[:-1]
x[0] = 9
y
Out[9]:
array([9, 2, 3])
内存不必为一个ndarray
拥有:
In [10]:
x = '1234'
y = np.frombuffer(x, dtype=np.int8)
y.data
Out[10]:
<read-only buffer for 0x105ee2e40, size 4, offset 0 at 0x105f883b0>
In [11]:
y.base is x
Out[11]:
True
In [12]:
y.flags
Out[12]:
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : False
ALIGNED : True
UPDATEIFCOPY : False
owndata
和writeable
标记表明了内存块的状态。
也可以看一下:array接口