Размеры в ключе кэша
Кэш цен хранит цену товара для набора размеров. Набор пришёл в разном порядке. Что выведет код?
Кэш цен хранит цену товара для набора размеров. Набор пришёл в разном порядке. Что выведет код?
sizes_a = ("M", "L") sizes_b = ("L", "M") cache = {} cache[(42, frozenset(sizes_a))] = 1499 cache[(42, frozenset(sizes_b))] = 1599 cache[(42, sizes_a)] = 1699 cache[(42, sizes_b)] = 1799 print(len(cache)) print(cache[(42, frozenset({"M", "L"}))])
Список внутри ключа запрещён, поэтому набор размеров кладут как frozenset или как кортеж.
frozenset — множество: {"M", "L"} и {"L", "M"} равны, это один ключ, и вторая запись перезаписала первую (1599).
Кортежи ("M", "L") и ("L", "M") не равны: порядок важен, поэтому это два разных ключа.
Итого 3 ключа. Если порядок значений не важен по смыслу, ключ строят на frozenset.