gpt4 book ai didi

python - 如何在 Python 中测试 "immutability-at-any-depth"?

转载 作者:太空狗 更新时间:2023-10-29 20:20:37 25 4
gpt4 key购买 nike

我将 Python 对象定义为“在任何深度都不可变”当且仅当

  1. 它(名义上)是不可变的;
  2. 如果它是一个“容器”对象,那么它只包含“在任何深度都不可变”的对象;

例如 ((1, 2), (3, 4)) 在任何深度都是不可变的,而 ((1, 2), [3, 4]) 不是(尽管后者由于是一个元组,“名义上”是不可变的)。

Is there a reasonable way to test whether a Python object is "immutable at any depth"?

测试第一个条件相对容易(例如使用 collections.Hashable 类,并忽略未正确实现的 __hash__ 方法的可能性),但第二个条件条件更难测试,因为“容器”对象的异质性,以及迭代其“内容”的方法...

谢谢!

最佳答案

没有通用的不变性测试。仅当对象的任何方法都不能改变底层数据时,该对象才是不可变的。

更有可能的是,您对通常取决于不变性的可哈希性感兴趣。可散列的容器将递归散列其内容(即元组和卡住集)。因此,您的测试相当于运行 hash(obj),如果成功,则它是深度可哈希的。

IOW,您的代码已经使用了可用的最佳测试:

>>> a = ((1, 2), (3, 4))
>>> b = ((1, 2), [3, 4])
>>> hash(a)
5879964472677921951
>>> hash(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

关于python - 如何在 Python 中测试 "immutability-at-any-depth"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com