Python实现HashMap时append内层列表导致所有子列表新增元素问题
问题根因
该问题是Python中可变对象的引用共享特性导致的:
当你使用self.table = [[]] * size初始化哈希表时,并不会生成size个独立的空列表,只会创建1个空列表对象,再把该对象的内存引用重复size次填充到外层数组中。也就是说self.table中所有的子列表指向的是同一个内存地址的对象,你对任意索引位的子列表执行append操作,本质上修改的都是同一个列表,所以所有位置都会同步出现新增的元素。
修复方案
将__init__方法的初始化逻辑替换为列表推导式即可,每次循环都会生成全新的独立空列表:
def __init__(self, size=10): self.table = [[] for _ in range(size)]
修改后调用put方法只会修改哈希取模对应索引位的子列表,其余位置保持为空,输出结果和你的预期一致。
内容的提问来源于stack exchange,提问作者S. Doe
相关产品推荐
相关产品推荐

