Строки неизменяемы: доказательство через id() и переход ASCII → Unicode
less_08__str_datatype/theory_01__str_is_immutable__ascii_unicode.md
Ссылается на предыдущее доказательство immutable-типов через id() (из урока про арифметику) и повторяет его именно для строк: s += ' world!' меняет адрес переменной в памяти, значит исходная строка не модифицируется, а создаётся заново. Вторая часть — короткая историческая справка: Python 2 использовал ASCII, Python 3 перешёл на Unicode для поддержки всех символов, а не только латиницы.
- id(s) до и после s += ' world!' — адрес меняется
- Строка изменяется только через создание новой ячейки памяти
- Python 2: кодировка ASCII
- Python 3: переход на Unicode
Показать начало файла (25 строк всего)
## Строки - неизменяемый (`immutable`) тип данных.
Доказательства находится [здесь](../less_03__arithmetic_operations__type_conversion/theory_03__augmented_assignment_operators.md)
**Важно:**
Из этого вовсе не следует, что нельзя проводить операции по изменению строк!
Просто результат этого изменения будет находиться в новой (другой) ячейке памяти:
```python
s = 'Hello'
print(id(s)) # 139908104970544
print(s) # Hello
s += ' world!'
print(id(s)) # 139907897652336
print(s) # Hello world!
```
## Различные кодировки строк
Строка - это упорядоченный набор символов.
Каждый символ имеет свой код.
В Python 2 использовалась [кодировка `ascii`](https://en.wikipedia.org/wiki/ASCII#Printable_character_table)
Именно для перевода строк в другую кодировку, а именно в [кодировку `Unicode`](https://en.wikipedia.org/wiki/UTF-8#Description),
перешли на Python 3.