Найти - Пользователи
Полная версия: При вызове append заменяет все элементы списка
Начало » Python для новичков » При вызове append заменяет все элементы списка
1
ipshiv
Доброго времени суток!
При выполнении 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

UPD: это может быть связано с оперативкой?
py.user.next
Создавай копию вектора до вызова mutate(), во время вызова или после вызова.
ipshiv
py.user.next
Создавай копию вектора до вызова mutate()
Попробовал создавать копию element, но возникает вопрос что с ним потом делать, т.к. каждая попытка обратиться к popul заменяет все элементы.
Попробовал вынести new_vec = vec в цикл, но хрен редьки не слаще.
py.user.next
ipshiv
Попробовал создавать копию element
Значит, неправильно создаёшь копию.

ipshiv
Попробовал вынести new_vec = vec в цикл
Это не создаёт новый объект, а просто новое имя привязывает к тому же объекту.
ipshiv
py.user.next
Значит, неправильно создаёшь копию
посредством list помогло, если не трудно, подскажите в чем косяк или ссылку на документацию.
py.user.next
Пример:
>>> 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]]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB