Python 在一个对象上调用类的方法会影响同一类中的另一个对象
可能重复:Python 在一个对象上调用类的方法会影响同一类中的另一个对象,python,class,Python,Class,可能重复: 下面是我构建一个名为Neuron的类的代码: class Neuron(): def __init__(self,connection=[]): self.connection=connection def makeConnection(self,other): self.connection.append(other) def getConnection(self): return self.connection 正如您所看到的
下面是我构建一个名为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]连接到了它自己!?!请有人帮忙 变化
def __init__(self, connection=[]):
self.connection = connection
到
否则,所有对象都会引用同一个列表。当你改变一个神经元的连接时,所有其他神经元也会改变。你没有阅读上一个问题结束时包含的链接吗?请不要打开内容完全相同的副本。对不起,我以为我的问题与此无关,但现在我明白你的观点了,伙计。。。!哇!太棒了!我想不出来!但是为什么connection=[]并不意味着空列表。我原以为它会为每个对象创建一个新的空列表……我知道哪里出了问题,但现在我很困惑!:)谢谢大家!@Sun:定义函数时,它会创建一个新列表,并不断重复使用该列表。它不会在每次调用该函数时都生成一个新的列表。@Sun:花两分钟阅读我们链接到您的问题也会为您解决这个问题。
def __init__(self, connection=None):
if connection is None:
connection = []
self.connection = connection