栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

嵌套字典或元组作为键?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌套字典或元组作为键?

无需赘述(无论如何,它们都是高度依赖于实现的,并且可能会由于下一个天才而失效并调整字典的实现):

  • 对于内存开销:每个对象都有一些开销(例如refcount和type;一个空对象为8个字节,一个空元组为28个字节),但是哈希表需要存储哈希,键和值,并且通常使用比当前所需更多的存储桶避免碰撞。另一方面,元组不能调整大小并且没有冲突,即N个元组可以简单地将N个指针分配给所包含的对象并完成操作。这导致显着的内存消耗差异。
  • 对于查找和插入复杂度(在这方面两者是相同的):无论是字符串还是元组,在CPython的dict实现中冲突很少发生,并且非常有效地解决了冲突。更多的键(因为您通过将元组中的键组合来缩小键空间)似乎增加了冲突的可能性,更多的键也导致了更多的存储桶(AFAIK,当前实现尝试将负载因子保持在2/3之间),反过来使碰撞的可能性降低。同样,您不需要更多的哈希(当然,还可以再进行一次函数调用和元组哈希的某些C级异或运算,但这是可以忽略的)来获得一个值。

您会发现,尽管存在一些内存差异,但性能不应有任何明显的差异。我认为,后者并不是很明显。一元素dict是1​​40字节,十元素元组也是140字节(根据Python
3.2

sys.getsizeof
)。因此,即使有十个级别的嵌套(已经很不现实了,我的直觉也是如此),您的差异还是会略大于一kB-
如果嵌套的dict有多个项目(取决于确切的加载因子),差异可能会更小。对于具有数百个这样的数据结构存储在内存中的数据处理应用程序来说,这太多了,但是大多数对象创建的频率并不高。

您应该简单地问自己,哪种模型更适合您的问题。考虑第二种方法要求您一次拥有一个值的所有键,而第二种方法允许递增地到达那里。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653103.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号