# 图数据结构定义
class Graph():
def __init__(self):
self.nodes = dict()
self.edges = set()
class Node():
def __init__(self, value, i=0, o=0, nexts=[], edges=[]):
self.value = value
self.i = i # 入度
self.o = o #出度
self.nexts = nexts # 该结点所有指向的结点列表
self.edges = edges
class Edge():
def __init__(self, fro, to, weight=0):
self.fro = fro
self.to = to
self.weight = weight
fromNode = Node(fro)
toNode = Node(to)
fromNode.nexts.append(toNode)
创建两个结点fromNode,toNode ,当在fromNode的nexts列表中加入toNode结点时,发现toNode结点的nexts中也加入了该结点,从下面两张图可以看到,两个实例的的nexts列表的地址是相同的,所以当fromNode的nexts插入toNode 时,toNode 的nexts中也会改变。也就是说当默认参数是可变类型时,不同的实例共享一个默认参数。
将Node定义修改如下,每个实例拥有自己的nexts表,避免共享产生的问题
class Node():
def __init__(self, value, i=0, o=0):
self.value = value
self.i = i
self.o = o
self.nexts = []
self.edges = []