k
- это не строка, это имя переменной. Вы можете легко сделать
k = 'a'
k = 10
без каких-либо проблем, поскольку оператор присваивания в Python назначит имя, указывающее на любое значение справа.
Строки являются неизменяемыми, как вы упомянули, но это означает, что как объект, он не имеет метода, который вы можете вызвать, который заставит его изменить свои данные. Каждой переменной в Python всегда можно присвоить указатель на что-то еще.
Например, если вы говорите
x = y = 'hello'
, тогда и x
, и y
ссылаются на один и тот же объект, но операторы присваивания, такие как
x += 'world'
или
x = 'bacon'
изменит привязку x
, чтобы указывать на что-то еще.