2016-06-25 1 views
0

Я пытаюсь написать код для настройки переменных в моей шахматной программе, и я обнаружил, что этот код не выполняет то, что я ожидаю от него вообще.Изменение переменной в списке не влияет на список

import random 

# Knight value, bishop value, rook value, queen value 
values = [300, 300, 500, 900] 

e1vals = values 
e2vals = values  

# Add a gaussian distributed random number to it 
deltas = [] 
for i in range(0, len(values)): 
    x = random.gauss(0, 20) 
    deltas.append(x) 

for i in range(0, len(values)): 
    e1vals[i] = values[i] + deltas[i] 
    e2vals[i] = values[i] - deltas[i] 

print(e1vals) 
print(e2vals) 

Наглядно код здесь нужно просто добавить или вычесть значения в дельтах до e1vals и e2vals, но вместо этого он не делает каких-либо изменений, кроме литья значений с плавающей точкой.

Я использую Python 3.5.1, если это имеет значение.

+0

@GWW Нет, я указываю, что добавление к переменным списка не меняет список. – ZirconiumX

+1

@ ZirconiumX Точно, см. Обман и создайте новую копию списка, используя 'e1vals = values ​​[:]'. –

+0

@ Zirconium 'e1values ​​= values ​​[:]' и 'e2values ​​= values ​​[:]' Предполагая, что 'e1vals' должен быть' e1values' и т. Д. –

ответ

1

Проблема в том, что e1values и e2values относятся к тому же. Таким образом, весь ваш код добавляет значение к каждому элементу в списке, а затем вычитает его снова, оставляя исходное значение.

+0

Правильно, поэтому e1values ​​и e2values ​​являются ссылками, а не копиями? – ZirconiumX

+1

Правильно, назначение всегда создает ссылку. –

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