2013-12-12 3 views
0

Так что я эту функцию в Python:Оригинальные заданы параметры перезаписываются

def newk(kor, flds): 
    field=0.5*flds 
    knw=[] 

    for i in range(flds): 
     ktemp=kor 
     if ktemp[2]+i>field: 
      ktemp[2]-=(i-1) 
     else: 
      ktemp[2]+=i 
     knw+=[ktemp] 
     print knw 
     print ktemp 
     print kor, '\n' 
    return knw 

который вызывается:

knew=newk(kvals, folds) 

Мои оригинальные kvals получает перезаписаны по какой-то причине. Kvals - это список. Также ktemp продолжает накапливаться, как полагается кнуту, и он завинчивает все. Мой результат выглядит следующим образом:

[[0,05, 0,05, 0,166667]] [0,05, 0,05, 0,166667] [0,05, 0,05, 0,166667]

[[0,05, 0,05, 1,166667], [0,05 , 0,05, 1,166667]] [0.05, 0.05, 1,166667] [0.05, 0.05, 1,166667]

[[0,05, 0,05, -0,8333330000000001], [0,05, 0,05, -0,8333330000000001], [0,05, 0,05, -0.8333330000000001]] [0,05, 0,05, -0,8333330000000001] [0,05, 0,05, -0,8333330000000001]

K значения точки являются: [0,05, 0,05, -0,8333330000000001] (оригинал kvals был [0.05,0.05,0.166667])

Но мне нужен выход, чтобы выглядеть следующим образом: KNW бы [[0.05, 0.05, 0.166667],[0.05, 0.05, 1.166667],[0.05, 0.05, -0.833333], KVAL бы [0.05, 0.05, 0.166667] Кроме того, когда я измените ktemp = kor в цикле на константу ktemp = [0.05, 0.05, 0.166667] все работает.

+1

Добро пожаловать в SO. Это может помочь нам сообщить, на каком языке он запускается - желательно, добавив соответствующий тег. Я думаю, вы можете удалить «перезаписать» один, пока вы на нем, это не полезно. –

+0

выглядит как python со сломанным отступом. – devnull

+0

Я не знаю, почему это сломало мой отступ, но тело функции с отступом. –

ответ

3

Когда вы ktemp=kor вы в конечном итоге с двумя именами, указывая на тот же список объектов & поэтому модификация ktemp так же, как изменение kor. Если вы хотите получить копию , вам необходимо указать ktemp = kor[:] (при условии, что kor - это просто цифры - если вы хотите получить «глубокую копию» списка со сложными объектами, это другая проблема).

+0

Большое спасибо, что сделал. –

Смежные вопросы