我需要使用多个哈希表,因此在c++中,我通常会使用std::unordered_map。到目前为止,我可以理解我可以在Python中使用字典,所以让我们假设以下代码:
my_dict_1 = {}
my_dict_1['foo'] = 1
my_dict_2 = {}
my_dict_2['foo'] = 2
这两个词典是否会使用不同的哈希函数(注意键是相同的),因此它们可以被认为是两个不同的哈希表(我的意思是它们实际上会以不同的方式存储数据) ?
编辑:
是的,词典当然是两个不同的对象,但问题是它们将用于存储数据的技术!
答案 0 :(得分:2)
一个简单的Python shell实验,显示不同的词典可以使用相同的键:
X
This很好地讨论了它是如何实现的。关键点在于每个字典都分配了自己的内存部分(当然可以根据需要增长)。 完全相同的散列函数用于两个字典,但用于探测内存中的不同区域。
答案 1 :(得分:1)
ID(...)
id(object) - >整数
返回对象的标识。这保证在同时存在的对象中是唯一的。 (提示:它是对象的内存地址。)
上面是id
doc字符串,它说对象的标识是对象的内存地址,所以我们可以使用id
函数来查看变量的内存地址:
在你的程序中,我可以看到这样的地址:
def main():
my_dict_1 = {}
my_dict_1['foo'] = 1
my_dict_2 = {}
my_dict_2['foo'] = 2
print(hex(id(my_dict_1['foo'])))
print(hex(id(my_dict_2['foo'])))
if __name__ == '__main__':
main()
该程序输出:
0x9a33e0
0x9a3400
我们可以看到my_dict_1['foo']
和my_dict_2['foo']
有不同的内存地址。
所以我认为这两个dicts应该使用相同的哈希函数,但变量的内存地址应该是哈希值和基值的总和。这样,两个变量将存储在不同的存储区中。