ты создаешь список, а потом умножаешь его на 2, таким образом он не клонируется, а копируется сам объект со всеми его адресами, поэтому b[0][0] == b[1][0] и b[0][1] == b[1][1], так как у тебя в b[0] находится тот же объект что и в b[1].
Если хочешь создавать многомерные массивы используй:
b = numpy.array(range(4))
b.shape = (2,2)