2
class Node:                                                                     
    def __init__(self,dic_nodes = dict()):                                      
        self.dic_nodes = dic_nodes                                              

root = Node()                                                                   
print("original_root:", root)                                                   
word = "sci"                                                                    
length = len(word)                                                              
for i in range(0, length):                                                      
    if word[i] not in root.dic_nodes:                                           
        print("root:", root)                                                    
        new_node = Node()                                                       
        print("new_node:", new_node, len(new_node.dic_nodes))                   
        root.dic_nodes[word[i]] = new_node                                      
        next = root.dic_nodes[word[i]]                                          
        print("next:", next, len(root.dic_nodes[word[i]].dic_nodes))            
        root = next                                                             
        print("root:", root)                                                    
    print()

输出是这样的:

original_root: <__main__.Node object at 0x109eb1510>  
root: <__main__.Node object at 0x109eb1510>  
new_node: <__main__.Node object at 0x109ec3350> 0  
next: <__main__.Node object at 0x109ec3350> 1  
root: <__main__.Node object at 0x109ec3350>  

root: <__main__.Node object at 0x109ec3350>  
new_node: <__main__.Node object at 0x109eb1510> 1  
next: <__main__.Node object at 0x109eb1510> 2  
root: <__main__.Node object at 0x109eb1510>  

root: <__main__.Node object at 0x109eb1510>  
new_node: <__main__.Node object at 0x109ec3fd0> 2  
next: <__main__.Node object at 0x109ec3fd0> 3  
root: <__main__.Node object at 0x109ec3fd0>

我的问题:我
第二次调用 Node() 来构造一个新对象,我认为“ len(new_node.dic_nodes) ”也应该是 0,就像我第一次创建一个新对象一样。我无法弄清楚我的问题出在哪里。

4

1 回答 1

4

因为它每次都使用相同的字典作为默认参数,所以默认字典会随着时间的推移而增长。而是这样做:

class Node:                                                                     
    def __init__(self, dic_nodes=None):
        if dic_nodes is None:
            dic_nodes = dict()
        self.dic_nodes = dic_nodes    
于 2013-08-26T02:18:41.357 回答