2016-03-16 3 views
0

Никогда не запускайте пробег по сравнению с этим на python раньше, и мне интересно, почему это происходит и как я могу его избежать. Когда я устанавливаю y = redundanciesArray, я хочу сделать копию массива, изменить значение в каком-то индексе, действовать на это изменение, а затем сбросить y, чтобы быть новой копией массива. Что происходит, так это то, что на первом проходе redundanciesArray = [2,1,1,1,1], а на втором - [2,2,1,1,1]. Это похоже на y, действующий как указатель на redundanciesArray. Наверное, я не правильно использую массивы или что-то в этом роде, надеюсь, кто-то может осветить то, что мне здесь не хватает.Python for loop behavior

redundanciesArray = [1, 1, 1, 1, 1] 
probabilityArray = [0.5, 0.5, 0.5, 0.5, 0.5] 
optimalProbability = 0 
index = -1 

for i in range(0, len(redundanciesArray)): 
    y = redundanciesArray 
    y[i] = y[i] + 1 
    probability = calculateProbability(y, probabilityArray) 
    //calcuateProbability returns a positive float between 0 and 1 

    if(probability > optimalProbability): 
     optimalProbability = probability 
     index = i 
+1

Вы хотите скопировать массив, для получения параметров см. Http://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list-in-python – Matthew

+0

Да, это работает, я скопировал увольнения массив вместо того, чтобы просто установить его равным. Что я действительно делаю в этом существующем коде? Сделать y указателем? – LBaelish

ответ

1

Python использует имена, которые ведут себя несколько похоже на ссылки или указатели. Так делает

y = redundanciesArray 

будет просто сделать yточки в тот же объекта, который redundanciesArray уже указал на. Оба y и redundanciesArray - это просто имена («ссылки на») того же объекта.

Если вы затем сделать y[i] = y[i] + 1, он будет изменять положение i в объекте, на который указывает как y и redundanciesArray.