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.