Python
请解释为什么这两个代码的工作方式不同。实际上我正在尝试制作一种人工智能,在最初的几代人中,人们会朝着随机的方向前进。为了保持代码简单,我自己在Brain中提供了一些随机方向。
有一个为个人提供大脑的个人课程。它还有一个功能,可以返回与父母具有完全相同大脑(意味着进入相同方向)的孩子。
我有两个代码:
第一:当父母的某些方向改变时,孩子也会改变同样的事情(或者如果孩子改变了,父母也会改变)这是我不希望发生的。
第二:这个不完全是我的(这就是为什么我真的不知道它为什么起作用)但它工作得很好。父母改变的某些方向在孩子身上没有改变,反之亦然。
请有人解释我的区别以及为什么第一个不起作用。我真的很感激你的回答。
第一:
class Brain():
def __init__(self):
self.directions = [[1, 2], [5, 3], [7, 4], [1, 5]]
class Individual():
def __init__(self):
self.brain = Brain()
def getChild(self):
child = Individual()
child.brain = self.brain
return child
parent = Individual()
child = parent.getChild()
parent.brain.directions[0] = [5, 2]
print(parent.brain.directions)
print(child.brain.directions)
[ [5, 2], [5, 3], [7, 4], [1, 5] ]
[ [5, 2], [5, 3], [7, 4], [1, 5] ]
第二个:
class Brain():
def __init__(self):
self.directions = [[1, 2], [5, 3], [7, 4], [1, 5]]
def clone(self):
clone = Brain()
for i, j in enumerate(self.directions):
clone.directions[i] = j
return clone
class Individual():
def __init__(self):
self.brain = Brain()
def getChild(self):
child = Individual()
child.brain = self.brain.clone()
return child
parent = Individual()
child = parent.getChild()
parent.brain.directions[0] = [5, 2]
print(parent.brain.directions)
print(child.brain.directions)
[ [5, 2], [5, 3], [7, 4], [1, 5] ]
[ [1, 2], [5, 3], [7, 4], [1, 5] ]