Как с помощью аннотации типов указать что элементы списка неизменяемые?

Требуется указать для списка, что все его элементы принадлежат к неизменяемым типам:

list[<...>]

Требуется именно "категория", наподобие list[typing.Immutable] (взял из головы). А не перечислять все типы.

Не смог найти информацию в интернете, также копался в модуле typing.

Есть мысль обойтись собственным решением:

Immutable = str | int | bool | ...
list[Immutable]

Ответы (1 шт):

Автор решения: Flop-code

На мой взгляд, лучшим решением будет объявить Immutable вот так:

Immutable = typing.Hashable

Человеку, который читает код, неизменяемость элементов будет понятна из названия, а так как hashable объект обязан быть неизменяемым, то mypy будет высвечивать соответствующее предупреждение при нарушении типизации.

my_list: list[Immutable] = [...]

Других вариантов обозначить неизменяемость с помощью typing нет.

→ Ссылка