Блоги

Умножение контейнеров в Python

Автор: CoolPython

Один интересный факт из Python. Вы, наверное, знали, что для строк определен оператор умножения и что можно делать так:

>>> 'привет ' * 4
'привет привет привет привет '

То же, вообще говоря, работает с другими контейнерами, например, с кортежами:

>>> ('привет',) * 3
('привет', 'привет', 'привет')

И с этим все хорошо, пока внутри контейнера не появляется ссылка на изменяемый объект. Например, на словарь:

>>> d = [{'key': 'val'}] * 2
>>> d
[{'key': 'val'}, {'key': 'val'}]

Потому что теперь каждый из двух словарей доступен по одной и той же ссылке:

>>> d[0]['key'] = ''
>>> d
[{'key': ''}, {'key': ''}]

Упс, отстрелили себе ногу. Умножение — это валидный способ создавать составные объекты только если вложенные неизменяемы.

Марина

Recent Posts

Символы новой строки в Python

В этом руководстве мы разберем все, что нужно знать о символах перехода на новую строку…

1 месяц ago

if __name__ == «__main__» в Python: полное объяснение

Блок if __name__ == "__main__" в Python позволяет определить код, который будет выполняться только при…

1 месяц ago

Как писать модульные тесты для методов экземпляра в Python

Давайте разберем, как настроить модульные тесты для экземпляров классов. Мы напишем тесты для проверки функциональности…

3 месяца ago

Как исправить ошибку «’builtin_function_or_method’ object is not subscriptable» в Python

Функции Python - это вызываемые объекты. Это означает, что для выполнения кода, определенного в функции,…

3 месяца ago

Как получить текущую директорию в Python

Многие программы на Python нуждаются в навигации по файловой системе для чтения и записи файлов.…

3 месяца ago

Как писать модульные тесты на Python

Юнит-тестирование с помощью unittest заключается в создании тест-кейсов для проверки функциональности отдельных частей вашего кода.…

4 месяца ago