Python进阶之路(六)比list更迅速的还有数组

引言

数组与列表,元祖的本质区别在于: 元素单一性以及内容嵌入.

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)

由于可指定更紧凑的数字类型,故数组可节约更多内存,再者,内容嵌入也避免了对象的额外靠小,减少了活跃对象的数量和内存分配的次数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值