Автор: CoolPython
Один интересный факт из Python. Вы, наверное, знали, что для строк определен оператор умножения и что можно делать так:
>>> 'привет ' * 4 'привет привет привет привет '
То же, вообще говоря, работает с другими контейнерами, например, с кортежами:
>>> ('привет',) * 3 ('привет', 'привет', 'привет')
И с этим все хорошо, пока внутри контейнера не появляется ссылка на изменяемый объект. Например, на словарь:
>>> d = [{'key': 'val'}] * 2 >>> d [{'key': 'val'}, {'key': 'val'}]
Потому что теперь каждый из двух словарей доступен по одной и той же ссылке:
>>> d[0]['key'] = '' >>> d [{'key': ''}, {'key': ''}]
Упс, отстрелили себе ногу. Умножение — это валидный способ создавать составные объекты только если вложенные неизменяемы.