为什么Python类变量的行为类似于静态变量?

2024-04-29 08:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个节点类,如下所示:

  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.incomingb.incoming,它们都会打印Node b。为什么这些值在不同的实例之间共享

当我将init函数更新为

  def __init__(self, data, incoming = [], outgoing = []):
    self.data = data
    self.incoming = []
    self.outgoing = []

一切都按预期进行,但我觉得两者应该是一样的。我在这里误解了什么


Tags: 实例函数selfnodenumber列表data节点
1条回答
网友
1楼 · 发布于 2024-04-29 08:32:10

当定义函数并与函数一起存储时,将评估默认参数。因此__init__会获取这些空列表,但每次修改它们时,修改都会被保存

请记住,在Python中,使用=进行新的赋值不会创建数据的副本。这些列表将与您所做的每项任务共享

相关问题 更多 >