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,就像我第一次创建一个新对象一样。我无法弄清楚我的问题在哪里。
答案 0 :(得分:4)
因为每次都使用same dict as the default argument,所以默认dict会随着时间的推移而增长。而是这样做:
class Node:
def __init__(self, dic_nodes=None):
if dic_nodes is None:
dic_nodes = dict()
self.dic_nodes = dic_nodes