可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
Unexpected connections between class instances
这是构建一个名为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]连接到自身!?!请有人帮忙!
答案 0 :(得分:3)
更改
def __init__(self, connection=[]):
self.connection = connection
到
def __init__(self, connection=None):
if connection is None:
connection = []
self.connection = connection
否则所有对象最终都会引用相同的列表。当你改变一个神经元的连接时,所有其他神经元也会改变。