# -*- coding: utf-8 -*-
import copy, random
class Genome:
def __init__(self, genomeSize, fillGenome=1):
self.__gens = []
for i in range(genomeSize):
self.__gens[i:] = [0]
if 1 == fillGenome:
for i in range(genomeSize):
self.__gens[i] = random.random()
def get(self):
return self.__gens
def mutation(self):
self.__gens[random.randrange(0, len(self.__gens))] = random.random()
genome = Genome(3)
print
print genome.get()
genome2 =copy.deepcopy(genome)
genome2.mutation()
print genome.get()
print genome2.get()
1.используйте deepcopy для полного копирования объекта.
2.__gens у вас атрибут класса, а не экземпляра, и также относится к изменяемому типу(читайте в любом учебнике питона), т.е. для всех экземпляров он один!
чтобы понять попробуйте:
# -*- coding: utf-8 -*-
import copy, random
class Genome:
__gens = []
def __init__(self, genomeSize, fillGenome=1):
for i in range(genomeSize):
self.__gens[i:] = [0]
if 1 == fillGenome:
for i in range(genomeSize):
self.__gens[i] = random.random()*100
def get(self):
return self.__gens
def mutation(self):
self.__gens[random.randrange(0, len(self.__gens))] = 'new'
genome = Genome(3)
print
print genome.get()
genome2 =copy.deepcopy(genome)
genome2.mutation()
print genome.get()
print genome2.get()
genome3 = Genome(5)
print '-'*15
print genome.get()
print genome2.get()
print genome3.get()