Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 12, 2015 23:35:22

ipshiv
Зарегистрирован: 2014-04-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

При вызове append заменяет все элементы списка

Доброго времени суток!
При выполнении 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: это может быть связано с оперативкой?

Отредактировано ipshiv (Сен. 13, 2015 00:08:05)

Офлайн

#2 Сен. 13, 2015 01:50:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

При вызове append заменяет все элементы списка

Создавай копию вектора до вызова mutate(), во время вызова или после вызова.



Офлайн

#3 Сен. 13, 2015 06:48:23

ipshiv
Зарегистрирован: 2014-04-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

При вызове append заменяет все элементы списка

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

Офлайн

#4 Сен. 13, 2015 07:20:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

При вызове append заменяет все элементы списка

ipshiv
Попробовал создавать копию element
Значит, неправильно создаёшь копию.

ipshiv
Попробовал вынести new_vec = vec в цикл
Это не создаёт новый объект, а просто новое имя привязывает к тому же объекту.



Офлайн

#5 Сен. 13, 2015 08:07:35

ipshiv
Зарегистрирован: 2014-04-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

При вызове append заменяет все элементы списка

py.user.next
Значит, неправильно создаёшь копию
посредством list помогло, если не трудно, подскажите в чем косяк или ссылку на документацию.

Офлайн

#6 Сен. 13, 2015 08:37:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

При вызове append заменяет все элементы списка

Пример:

>>> 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]]
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version