2.2.1.2 内存块

In [5]:

  1. x = np.array([1, 2, 3, 4], dtype=np.int32)
  2. x.data

Out[5]:

  1. <read-write buffer for 0x105ee2850, size 16, offset 0 at 0x105f880f0>

In [6]:

  1. str(x.data)

Out[6]:

  1. '\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00'

数据的内存地址:

In [7]:

  1. x.__array_interface__['data'][0]

Out[7]:

  1. 4352517296

完整的array_interface

In [8]:

  1. x.__array_interface__

Out[8]:

  1. {'data': (4352517296, False),
  2. 'descr': [('', '<i4')],
  3. 'shape': (4,),
  4. 'strides': None,
  5. 'typestr': '<i4',
  6. 'version': 3}

提醒:两个ndarrays可以共享相同的内存:

In [9]:

  1. x = np.array([1, 2, 3, 4])
  2. y = x[:-1]
  3. x[0] = 9
  4. y

Out[9]:

  1. array([9, 2, 3])

内存不必为一个ndarray拥有:

In [10]:

  1. x = '1234'
  2. y = np.frombuffer(x, dtype=np.int8)
  3. y.data

Out[10]:

  1. <read-only buffer for 0x105ee2e40, size 4, offset 0 at 0x105f883b0>

In [11]:

  1. y.base is x

Out[11]:

  1. True

In [12]:

  1. y.flags

Out[12]:

  1. C_CONTIGUOUS : True
  2. F_CONTIGUOUS : True
  3. OWNDATA : False
  4. WRITEABLE : False
  5. ALIGNED : True
  6. UPDATEIFCOPY : False

owndatawriteable标记表明了内存块的状态。

也可以看一下:array接口