[x]*n
создает список, который содержит один и тот же элемент x
n
раз.
L = [0.0] * ncols
работает, потому что 0.0
- это число с плавающей точкой, а значения с плавающей точкой неизменны в Python, поэтому L[0] += 1.1
не меняет 0.0
, но ставит 1.1
на свое место.
Списки изменчивы, поэтому, когда вы изменяете любую строку в L = [[0]*ncol]*nrow
, вы изменяете их все, потому что это один и тот же объект.
Чтобы исправить это, вы можете:
L = [[0.0]*ncols for _ in xrange(nrows)]
Он создает новый список для каждой строки, так что вы можете изменить их независимо.
Или:
from itertools import repeat
L = [[0.0]*ncols for _ in repeat(None, nrows)]
Все, что более читабельно для вас.