我创建了这样的节点类:
def __init__(self, data, incoming = [], outgoing = []):
self.data = data
self.incoming = incoming
self.outgoing = outgoing
def addIncoming(self, incoming):
self.incoming.append(incoming)
def addOutgoing(self, outgoing):
self.outgoing.append(outgoing)
每个实例都像Node(number)
那样初始化,因此传入和传出参数默认为空列表。我还具有将其他节点附加到传入和传出列表的函数,但是当我这样做时,它会附加到每个实例。例如,假设我有a=Node(1)
和b=Node(2)
。如果我做了a.addIncoming(b)
并打印了a.incoming
和b.incoming
,它们都将打印Node b
。为什么在单独的实例之间共享这些值?
当我将初始化函数更新为
def __init__(self, data, incoming = [], outgoing = []):
self.data = data
self.incoming = []
self.outgoing = []
一切正常,但是我觉得两者应该一样。我在这里误会什么?
答案 0 :(得分:2)
在定义函数时评估默认参数,并将其与该函数一起存储。因此__init__
会得到这些空列表,但是每次您修改它们时,所做的修改都会被保存。
请记住,在Python中,用=
进行新赋值不会不复制数据。这些列表将与您进行的每个作业共享。