如何将Python字典的高阶特性巧妙地应用于编程实践中?
- 内容介绍
- 文章标签
- 相关推荐
本文共计679个文字,预计阅读时间需要3分钟。
特性(基于Python 3.4+流畅的Python+部分可用的Python最新版本)+键必须是可散列+字典和集合实现的背后是散列表+散列最小单元是元素+内存消耗巨大+相比列表将占用大量内存
特性(基于Python 3.4 流畅的Python 部分可能不适用最新版本)
键必须可散列
字典和集合实现的背后是散列。散列最小单元是表元。
内存开销巨大
相比列表将占用大量内存。典型的用空间换时间。在定义数据类型时,尽可能采用__slots__ 属性可以改变实例属性的存储 方式, 由 dict 变成 tuple
键查询速度极快
基于散列特性字典和集合对in进行了优化。in查询效率非常高
将迭代和更新尽可能分开
无论何时往字典里添加新的键, Python 解释器都可能做出为字典扩容的决定。 扩容导致的结果就是要新建一个更大的散列表, 并把字典里已有的元素添加到新表里。 这个过程中可能会发生新的散列冲突, 导致新散列表中键的次序变化。 要注意的是, 上面提到的这些变化是否会发生以及如何发生, 都依赖于字典背后的具体实现, 因此你不能很自信地说自己知道背后发生了什么。 如果你在迭代一个字典的所有键的过程中同时对字典进行修改, 那么这个循环很有可能会跳过一些键——甚至是跳过那些字典中已经有的键。由此可知, 不要对字典同时进行迭代和修改。
本文共计679个文字,预计阅读时间需要3分钟。
特性(基于Python 3.4+流畅的Python+部分可用的Python最新版本)+键必须是可散列+字典和集合实现的背后是散列表+散列最小单元是元素+内存消耗巨大+相比列表将占用大量内存
特性(基于Python 3.4 流畅的Python 部分可能不适用最新版本)
键必须可散列
字典和集合实现的背后是散列。散列最小单元是表元。
内存开销巨大
相比列表将占用大量内存。典型的用空间换时间。在定义数据类型时,尽可能采用__slots__ 属性可以改变实例属性的存储 方式, 由 dict 变成 tuple
键查询速度极快
基于散列特性字典和集合对in进行了优化。in查询效率非常高
将迭代和更新尽可能分开
无论何时往字典里添加新的键, Python 解释器都可能做出为字典扩容的决定。 扩容导致的结果就是要新建一个更大的散列表, 并把字典里已有的元素添加到新表里。 这个过程中可能会发生新的散列冲突, 导致新散列表中键的次序变化。 要注意的是, 上面提到的这些变化是否会发生以及如何发生, 都依赖于字典背后的具体实现, 因此你不能很自信地说自己知道背后发生了什么。 如果你在迭代一个字典的所有键的过程中同时对字典进行修改, 那么这个循环很有可能会跳过一些键——甚至是跳过那些字典中已经有的键。由此可知, 不要对字典同时进行迭代和修改。

