Разница в том, как вы получаете доступ к этим массивам. В первом случае
for j in data:
j = j * factor
Вы получаете доступ к каждому j <int>
в данных. Поскольку в Python переменные типа int
являются неизменяемыми, делая j = j * factor
, вы создаете новую переменную с именем j
с новой памятью, на старый j
по-прежнему ссылаются «данные», но старый Память j
здесь не изменилась. Важно отметить, что data
все еще ссылается на старый j
, поэтому он не изменяется.
В отличие от этого, при выполнении
for j in range(len(data)):
data[j] = data[j] * factor # <- equivalent to *=
Вы получаете указатель на j-й элемент из data
, умножьте его значение на factor
и установите data[j]
в качестве этого нового значения.