-1

重複の可能性:
Python の「最小の驚き」: 変更可能な既定の引数
クラス インスタンス間の予期しない接続

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

そうしないと、すべてのオブジェクトが同じリストを参照することになります。1 つのニューロンの接続を変更すると、他のすべてのニューロンも変更されます。

于 2012-11-26T12:04:00.013 に答える