Почему нельзя использовать словарь, находящийся внутри кортежа, в качестве ключа словаря? Есть ли гарантия, что в аргументы декорируемой функции не передадут словарь?

Кортеж хешируем только тогда, когда хешируемы все его элементы. Словарь внутри делает такой кортеж непригодным ключом; у произвольной декорируемой функции нет гарантии отсутствия dict в аргументах.

Короткий ответ

Что ответить на собеседовании

Кортеж хешируем только тогда, когда хешируемы все его элементы. Словарь внутри делает такой кортеж непригодным ключом; у произвольной декорируемой функции нет гарантии отсутствия dict в аргументах.

Подробный разбор

Ответ с пояснениями

Кортеж хешируем только тогда, когда хешируемы все его элементы. Словарь внутри делает такой кортеж непригодным ключом; у произвольной декорируемой функции нет гарантии отсутствия dict в аргументах.

Простой ключ кеша (args, kwargs) не работает: kwargs сам словарь, а args может содержать списки и другие нехешируемые объекты. Нужно определить контракт допустимых аргументов или явную функцию построения ключа. Рекурсивное «замораживание» требует правил для типов, порядка, циклов и изменяемости. Нельзя бездумно заменять всё на str: разные значения могут получить неоднозначное представление.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее