引言
数组与列表,元祖的本质区别在于: 元素单一性以及内容嵌入.
In [5]: memoryview(a).hex()
Out[5]: '11223344'
In [6]: import array
In [7]: a = array.array("b",[0x11, 0x22, 0x33, 0x44])
In [8]: memoryview(a).hex() # 使用内存视图查看,内容嵌入而并非指针
Out[8]: '11223344'
In [9]: a = array.array('i')
In [10]: a.append(100)
In [11]: a.append(100,12313)
TypeError Traceback (most recent call last)
<ipython-input-12-ea17a9ba5c84> in <module>
----> 1 a.append(100.12313)
TypeError: integer argument expected, got float
可直接存储包括UNicode 字符在内的各种数字.
符合类型需要用struct,marshal,pickle 等转换为二进制之后再进行存储.
In [17]: import array
In [18]: a = array.array("i",[1, 2, 3])
In [19]: a.buffer_info() # 返回缓存区
Out[19]: (42956432, 3)
In [20]: a.extend(range(1000))
In [21]: a.buffer_info()
Out[21]: (43128240, 1003)
由于可指定更紧凑的数字类型,故数组可节约更多内存,再者,内容嵌入也避免了对象的额外靠小,减少了活跃对象的数量和内存分配的次数.