1. При динамической типизации у переменной можно изменить тип, а у константы нет.
2. При статической типизации у переменной можно изменить тип, а у константы нет.
3. При сильной типизации у переменной можно изменить значение, а у константы нет.
4. При слабой типизации у переменной можно изменить значение, а у константы нет.
5. При явной типизации у переменной можно изменить наименование, а у константы нет.
6. При неявной типизации у переменной можно изменить наименование, а у константы нет.
В пайтон переменные по факту ссылки на объекты, чисто формально из-за этого можно "изменить имя" переменной (задать для объекта новое имя и удалить старое, что формально является сменой имени)
примеры:
Python 3.9.6
>>> a = 5 (а ссылается на объект 5)
>>> b = a (b ссылается на объект 5)
>>> id(a) (узнать id объекта)
2104176765360
>>> id(b)
2104176765360 (id одинаковы у переменных, потому что ссылаются на один и тот же объект)
>>> a +=b (a ссылается на объект 10)
>>> id(a)
2104176765520 (id объекта 10)
>>> id(b)
2104176765360 (всё ещё id объекта 5)
формально, объект 5 имел имя "а", и теперь имеет новое имя "b"
вот другой вариант:
>>> print(a, id(a))
10 2104176765520 (объект 10)
>>> print(b, id(b))
5 2104176765360 (объект 5)
>>> a, b = b, a (обмен значениями)
>>> print(a, id(a))
5 2104176765360 (объект 5)
>>> print(b, id(b))
10 2104176765520 (объект 10)
На самом деле, понятие "переменная" (идентификатор) это не так просто.
1) В каком-нибудь Delphi x:= 5; x:= 10 это адрес ячейки памяти, в которой была 5, потом 10.
2) В Питоне уже будут созданы два объекта (5 и 10), а x это указатель (сначала на один, потом на другой)
3) В Хаскеле x = 5 это вообще не инструкция, а определение (declaration) функции x, которая вызовет другую функцию - конструктор данных 10.