Я определяю объект Python как «неизменный на любой глубине» iff
- он (номинально) неизменен; и
- если это объект «контейнер», то он содержит только объекты, которые «неизменны на любой глубине»;
Например, ((1, 2), (3, 4))
неизменен на любой глубине, а ((1, 2), [3, 4])
- нет (даже если последний, в силу того, что он является кортежем, "номинально" неизменен).
Есть ли разумный способ проверить, является ли объект Python «неизменяемым на любой глубине»?
Относительно легко проверить первое условие (например, используя класс collections.Hashable
и пренебрегая возможностью неправильно реализованного метода __hash__
), но второе условие труднее проверить из-за неоднородности "контейнерных" объектов и средства перебора их "содержимого" ...
Спасибо!