diff --git a/translations/README-ru.md b/translations/README-ru.md index 9183b74..30384e7 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1685,3 +1685,42 @@ True - Интересное чтение: [Рефлексивность и другие основы цивилизации](https://bertrandmeyer.com/2010/02/06/reflexivity-and-other-pillars-of-civilization/) --- + + +### ▶ Мутируем немутируемое! + + + +Это может показаться тривиальным, если вы знаете, как работают ссылки в Python. + +```py +some_tuple = ("A", "tuple", "with", "values") +another_tuple = ([1, 2], [3, 4], [5, 6]) +``` + +**Результат:** +```py +>>> some_tuple[2] = "change this" +TypeError: 'tuple' object does not support item assignment +>>> another_tuple[2].append(1000) # Не приводит к исключениям +>>> another_tuple +([1, 2], [3, 4], [5, 6, 1000]) +>>> another_tuple[2] += [99, 999] +TypeError: 'tuple' object does not support item assignment +>>> another_tuple +([1, 2], [3, 4], [5, 6, 1000, 99, 999]) +``` + +Но кортежи неизменяемы... Что происходит? + +#### 💡 Объяснение: + +* Перевод цитаты из [документации](https://docs.python.org/3/reference/datamodel.html) + + > Неизменяемые последовательности + Объект неизменяемого типа последовательности не может измениться после создания. (Если объект содержит ссылки на другие объекты, эти объекты могут быть изменяемыми и могут быть изменены; однако набор объектов, на которые непосредственно ссылается неизменяемый объект, не может изменяться.) + +* Оператор `+=` изменяет список на месте. Присваивание элемента не работает, но когда возникает исключение, элемент уже был изменен на месте. +* Также есть объяснение в официальном [Python FAQ](https://docs.python.org/3/faq/programming.html#why-does-a-tuple-i-item-raise-an-exception-when-the-addition-works). + +---