python中的trie实现,对象引用

时间:2016-08-07 21:37:27

标签: trie

我在python中查看以下trie实现:

tree = {}

def add_to_tree(root, value_string):
    for character in value_string:
        root = root.setdefault(character, {})

def main():
    tree={}
    add_to_tree(tree, 'abc')
    print tree

if __name__=="__main__":
    main()

我不清楚的是:

  1. 为什么它会返回{a:{b:{c:{}}}}而不是{a:{},b:{},c:{}}

  2. 我通过this运行代码,可以对其进行可视化。通过“a”迭代后,我得到tree = {'a':{}}, root = {},然后在'b'之后得到tree = {a:{b:{}}}, root={}。什么不清楚是什么变量保留了对{b:{}}的引用,该引用被分配给{a:{}}以将其更改为{a:{b:{}}}

1 个答案:

答案 0 :(得分:0)

您正在为每个角色重新分配新创建的dict,请更改此行:

root = root.setdefault(character, {})

成为:

root.setdefault(character, {})

这给出了所需的输出(注意dict是无序的):

{'a': {}, 'c': {}, 'b': {}}