-1

可能重复:
Python 中的“Least Astonishment”:可变默认参数
类实例之间的意外连接

这是我构建一个名为 Neuron 的类的代码:

class Neuron():
  def __init__(self,connection=[]):
      self.connection=connection
  def makeConnection(self,other):
      self.connection.append(other)
  def getConnection(self):
      return self.connection

如您所见,此类的每个对象都有自己与同一类的其他对象的连接。现在我建立了一组神经元:

P=[]
for i in range(5):
   P.append(Neuron())

现在,我想在我的神经元之间建立联系:让我们做一些简单的事情:

 P[1].makeConnection(P[2])

现在当我签入 python 时:

 P[2].getConnection()

它在它的连接列表中给了我 P[2] !我刚刚在 P[1] 上应用了 makeConnection 方法,我到底在哪里将 P[2] 连接到自身!?!请有人帮忙!

4

1 回答 1

3

改变

def __init__(self, connection=[]):
      self.connection = connection

def __init__(self, connection=None):
      if connection is None:
          connection = []
      self.connection = connection

否则,您的所有对象最终都会引用同一个列表。当你改变一个神经元的连接时,所有其他神经元也会改变。

于 2012-11-26T12:04:00.013 回答