在对哈希结构的讨论中,我们已经在数组中使用了它,只是通过标记来定位某个数据。然后,我们学到的一些python知识点也会反映出一些哈希结构。本文将讨论字典和集合。具体的哈希结构将分别介绍这两个方面。让我们来看看季节的内容。
1、字典
PyDictKeysobject定义了字典哈希表的一些字段。有两个数组 dk_indices[] 和 dk_entries[],这两个是真正存储数据的数组。kv dk_数据保存entries[]在数组中,dk_indices[]来存储 kv dk_enties数组中保存的数据索引。其中每个 kv 以entry的数据结构存储数据,如下:
typedefstruct{ /*Cachedhashcodeofme_key.*/ Py_hash_tme_hash; PyObject*me_key; PyObject*me_value;/*Thisfieldisonlymeaningfulforcombinedtables*/ }PyDictKeyEntry;
me_hash缓存 key 防止哈希值重复计算。me_key和me_value就是 key 和 value 真实数据。
2、集合
和字典一样,底层也是哈希结构。与字典相比,只能理解为 key,没有 values。
与字典相比,集合要简单得多。存储数据的数组直接保存在Pysetobject中。
根据收集的底层数据结构分析,也用于解决哈希冲突「开发寻址法」。
一些常见的集合操作:
#初始化 s1={'1','2','3'}#不推荐,当元素中有字典时,会报错 s2=set(['1','4','5']) print#{'(s1);3','1','2'} print(二、#{'3','1','2'} #交集 print(s1&二、#{'1'} #并集 print(s1|二、#{'3','5','4','2','1'} #差集 print(s1-s2)#{#39;3','2'} #判断子集和超集 s2.issubset(s1)#s2是否为s1子集 s1.issuperset(s2)#s1是否为s2超集 #一些内部建筑方法的集合 #set.add(obj)添加集合元素 #set.remove(obj)删除集合元素 #set.update(set)合并集合 #set.pop()随机删除一个元素,并返回元素
以上是Python中哈希结构的两种解释。对于字典和集合的学习,可以结合哈希结构的内容进行深入探索,学习后可以练习代码部分。