Форум сайта python.su
0
Доброго времени суток!
При выполнении append все элементы списка заменяются на последний элемент.
Не могу понять где косяк, может незамыленный взгляд и опыт распознает ошибку:
popul = [] for x in range(popsize): element = mutate(query_vector, one_zero) print x, element popul.append(element) def mutate(vec, correction): #print query_phrase new_vec = vec n_vec = random.randint(0, len(vec)-1) #print n_vec, n_gram if correction[n_vec] == 0: n_gram = random.randint(0, len(filtred_vectors)-1) new_vec[n_vec] = (n_vec, vectors[n_gram][1]) return new_vec
Отредактировано ipshiv (Сен. 13, 2015 00:08:05)
Офлайн
857
Создавай копию вектора до вызова mutate(), во время вызова или после вызова.
Офлайн
0
py.user.nextПопробовал создавать копию element, но возникает вопрос что с ним потом делать, т.к. каждая попытка обратиться к popul заменяет все элементы.
Создавай копию вектора до вызова mutate()
Офлайн
857
ipshivЗначит, неправильно создаёшь копию.
Попробовал создавать копию element
ipshivЭто не создаёт новый объект, а просто новое имя привязывает к тому же объекту.
Попробовал вынести new_vec = vec в цикл
Офлайн
0
py.user.nextпосредством list помогло, если не трудно, подскажите в чем косяк или ссылку на документацию.
Значит, неправильно создаёшь копию
Офлайн
857
Пример:
>>> lst1 = [1, 2, 3] >>> lst2 = [lst1, lst1, lst1] >>> lst1 [1, 2, 3] >>> lst2 [[1, 2, 3], [1, 2, 3], [1, 2, 3]] >>> lst1.append(4) >>> lst1 [1, 2, 3, 4] >>> lst2 [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] >>>
Офлайн