我正在尝试在python中实现图形结构。整个逻辑有点奇怪,但我面临一个非常具体的问题。
t_graph = graph()
for i in range(0, 2):
non_emitting_state = template_node(-1, -1, 1, emitting=True, next_level = i)
t_graph.add_node(non_emitting_state)
for j in range(0, 2):
for k in range(0, 3):
t_node = template_node(i, j, k)
t_graph.add_node(t_node)
我的节点对象是
class template_node:
parents = []
children = []
mu = []
sigma = []
emitting = False
identifier = [0 for x in range(3)]
def __init__(self, level_no, HMM_no, state_no, emitting = False, next_level = -1):
if next_level == -1: next_level = level_no + 1
self.identifier[0] = level_no
self.identifier[1] = HMM_no
self.identifier[2] = state_no
,图表类是
class graph:
template_nodes = []
def add_node(self, template_node):
self.template_nodes.append(template_node)
但是在检查标识符的循环之后,所有都是相同的,一个对应于循环链中的最后一次迭代。 即所有节点的标识符都为[1,1,2],这意味着每次创建新节点时,它都会覆盖现有节点的属性。
我试过t_graph.add_node(copy.deepcopy(t_node))
但仍然是一样的。
任何关于我应该做什么的想法,以避免覆盖领域。
答案 0 :(得分:1)
identifier
是一个类变量,不是特定于实例的。移动
parents = []
children = []
mu = []
sigma = []
emitting = False
identifier = [0 for x in range(3)]
进入__init__()
。同样也适用于图表类。