The doc of FrozenList says
Container that doesn't allow setting item *but*
because it's technically hashable, will be used
for lookups, appropriately, etc.
which a tuple satisfies. Not sure why a tuple wasn't use originally but it may be simpler to use them instead of a custom FrozenList that acts like a tuple.