我将 Python 对象定义为“在任何深度都不可变”iff
- 它(名义上)是不可变的;和
- 如果它是一个“容器”对象,那么它只包含“在任何深度都不可变”的对象;
例如((1, 2), (3, 4))
,在任何深度都是不可变的,而((1, 2), [3, 4])
不是(即使后者由于是元组,“名义上”是不可变的)。
是否有合理的方法来测试 Python 对象是否“在任何深度都不可变”?
测试第一个条件相对容易(例如使用collections.Hashable
类,并忽略不正确实现方法的可能性__hash__
),但第二个条件更难测试,因为“容器”对象的异质性,以及迭代他们的“内容”......
谢谢!