Собственно, это именно то, чего вы ожидаете. Давайте разложим, что здесь происходит:
Вы пишете
lst = [[1] * 4] * 3
Это эквивалентно:
lst1 = [1]*4
lst = [lst1]*3
Это означает, что lst
- это список с 3 элемента, указывающие на lst1
. Это означает, что две следующие строки эквивалентны:
lst[0][0] = 5
lst1[0] = 5
Поскольку lst[0]
- это только lst1
.
Чтобы получить желаемое поведение, вы можете использовать понимание списка:
lst = [ [1]*4 for n in xrange(3) ]
В этом случае выражение переоценивается для каждого n, что приводит к другому списку.
Шаг за шагом проработайте:
let a = 0;
let b = 1;
Назначение переменных без пояснений.
for (let i = 1; i <= 10; i++) {...}
Итерация из 1
в 10
с сохранением i
текущей итерации
var c = a + b;
Установите для переменной c
значение a
+ b
.
a = b;
b = c;
Установите a
в b
и b
в c
- создает новые базовые значения для следующей итерации.
В этом примере показаны все переменные:
let a = 0;
let b = 1;
for (let i = 1; i <= 10; i++) {
var c = a + b;
a = b;
b = c;
console.log(`a: ${a}, b: ${b}, c: ${c}, i: ${i}`);
}