如果一个Python对象“在任何深度上都是不可变的”,则满足以下条件:
- 它是(名义上)不可变的;且
- 如果它是一个“容器”对象,则它只包含“在任何深度上都是不可变的”对象;
例如,((1, 2), (3, 4))
是在任何深度上都是不可变的,而((1, 2), [3, 4])
不是(尽管后者由于是元组而“名义上”不可变)。
有没有合理的方法来测试Python对象是否“在任何深度上都是不可变的”?
相对容易测试第一个条件(例如使用collections.Hashable
类,并忽略未经适当实现的__hash__
方法的可能性),但是第二个条件更难测试,因为“容器”对象的异构性以及迭代其“内容”的方法......
谢谢!