Есть такое поведение у python. Так как создаются ссылки на один и тот же объект. И потом этот объект меняется.
Здесь немного расписано >>> a = []
>>> b = []
>>> a.append(1)
>>> a
[1]
>>> b
[]
>>> a = b = []
>>> a.append(1)
>>> b
[1]
>>> a
[1]
В твоем случае нужно сделать так
import random
line = int(input('Сколько должно быть строк? '))
column = int(input('Сколько должно быть столбцов? '))
a = [[0 for _ in range(column)][:] for x in range(line)][:]
print(a)
for r in range(line) :
for c in range(column) :
print('строка ' + str(r+1) + ' ряд ' + str(c+1))
a[r][c] = random.randint(1, 100)
print(a[r][c], '!')
print(a)
Или же вообще так
import random
line = int(input('Сколько должно быть строк? '))
column = int(input('Сколько должно быть столбцов? '))
print([[random.randint(1, 100) for _ in range(column)] for x in range(line)])