chenyong20...@gmail.com wrote: > Hi, > I got a function call as this: > >>>>def add_to_tree(root,value_string): > ... print "root is %s, value_string is %s" % (root, value_string) > ... for ch in value_string: > ... print "ch is %s" % ch > ... root = root.setdefault(ch,{}) > ... print "root is", root > ... print "tree is", tree > ... >>>> tree={} >>>> txt='abc' >>>> add_to_tree(tree,txt) > root is {}, value_string is abc > ch is a > root is {} > tree is {'a': {}} > ch is b > root is {} > tree is {'a': {'b': {}}} > ch is c > root is {} > tree is {'a': {'b': {'c': {}}}} > > My question is: > (1) why root is always {}?
Because that's what you bind it to in the line > ... root = root.setdefault(ch,{}) See <https://docs.python.org/dev/library/stdtypes.html#dict.setdefault> for a description of the the setdefault() method. > (2) why tree is {'a': {'b': {'c': {}}}}? Basically the same answer -- you bind root to the innermost dict and that's where you insert the ch key on the next iteration of the for loop . > (3) why root isn't the same as tree? shouldn't they be the same because > tree is argument passed as root? You should know the answer by now ;) -- https://mail.python.org/mailman/listinfo/python-list