В языке Python переменные могут менять свой тип данных, то есть в разных строчках кода одной и той же переменной может быть присвоено значение разных типов. Рассмотрим ваши примеры:
S = 'Привет!'— здесь переменнойSприсваивается строка (тип данныхstr).S = 5— затем переменнойSприсваивается целое число (тип данныхint). Это позволяет утверждать, чтоSможет менять свой тип.b = 0— переменнойbприсваивается целое число (тип данныхint).c = 0.0— переменнойcприсваивается число с плавающей точкой (тип данныхfloat).
Таким образом, все варианты верные, поскольку переменные могут принимать разные значения и типы в разные моменты времени. Константы же, как правило, это значения, которые изначально задаются и не должны менять свое значение на протяжении выполнения программы. В данном случае констант нет, так как все присваивания могут происходить.