我创建了一个节点类,如下所示:
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
。为什么这些值在不同的实例之间共享
当我将init函数更新为
def __init__(self, data, incoming = [], outgoing = []):
self.data = data
self.incoming = []
self.outgoing = []
一切都按预期进行,但我觉得两者应该是一样的。我在这里误解了什么
当定义函数并与函数一起存储时,将评估默认参数。因此
__init__
会获取这些空列表,但每次修改它们时,修改都会被保存请记住,在Python中,使用
=
进行新的赋值不会创建数据的副本。这些列表将与您所做的每项任务共享相关问题 更多 >
编程相关推荐