Har*_*nam 6 python arrays list
当我遇到作者陈述的句子时,我正在阅读"流利的Python " 这本书
如果你需要存储1000万个浮点值,那么数组效率要高得多,因为数组实际上并不包含完整的成熟对象,只有表示其机器值的压缩字节 - 就像C语言中的数组一样.
我无法理解作者试图传达的内容.他怎么说'压缩字节'?'压缩字节存储'是什么意思?.python列表如何存储它?为什么不以那种方式存储它,如果这是使它有效的?
假设您正在处理8字节浮点数.此上下文中的"压缩字节"表示存在一个专用的已分配内存块,其中前8个字节表示第一个浮点数,然后立即接下来的8个字节表示下一个浮点数,依此类推,没有浪费.这是存储数据的最节省空间的方式(至少在没有压缩的情况下).对于某些操作(例如,数组算术运算),它也可能是最节省时间的.
Python list不会以这种方式存储东西.首先,一个列表元素可以是浮点数,但下一个列表元素可能是其他类型的对象.另外,您可以删除,插入或替换列表中的项目.其中一些操作涉及动态地延长或缩短列表.所有的都非常时间和内存- 在有效的,如果项目被存储为压缩字节.Python list类被设计为尽可能通用,在各种类型的操作的效率之间做出妥协.
可能最重要的区别在于Python list在其底层C实现中是一个充满指向对象指针的容器,而不是一个装满原始对象内容的容器.这样做的一个含义是对同一个 Python对象的多个引用可以出现在list.另一个是可以非常有效地完成更改特定项目.例如,假设列表中的第一项a[0]是整数,但是你想用一个占用更多内存的字符串替换它,例如,a[0] = "There's a horse in aisle five." 一个打包的数组必须(a)腾出额外的空间,转移所有的内存中其余的数组内容和(b)分别更新某种项目大小和类型的索引.但Python list只需要用另一个指针覆盖一个指针值.
在CPython实现中,指针本身可能仍然(或多或少)打包在内存中.这意味着将新项插入到list遗嘱中通常仍然效率低下(相对于Python list实现使用的方式,例如,引擎盖下的链接列表结构).
在一般情况下,没有绝对的"高效"或"低效" -它是所有问题这你是资源节约着,是什么(关于限制)的内容类型有在容器中,如何你打算变换容器或其内容.
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |