gpt4 book ai didi

python - 散列嵌套元组的限制?

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:56 25 4
gpt4 key购买 nike

演示我要问的几行代码是:

>>> x = ()
>>> for i in range(1000000):
... x = (x,)


>>> x.__hash__()

=============================== RESTART: Shell ===============================

1000000 可能过多,但它表明在散列嵌套元组时存在某种形式的限制(我假设其他对象)。澄清一下,我没有重启 shell,它会在我尝试哈希时自动重启。

我想知道的是这个限制是什么,为什么会发生(为什么它没有引发错误),以及有没有办法绕过它(这样我就可以将这样的元组放入集合或字典中) .

最佳答案

__hash__ method of tuple计算元组中每个项目的哈希值——在你的例子中就像一个递归函数。因此,如果您有一个嵌套很深的元组,那么它会以非常深的递归结束。在某些时候,堆栈上可能没有足够的内存来“更深一层”。这也是为什么在没有 Python 异常的情况下“shell 重新启动”的原因——因为回避是在 C 中完成的(至少对于 CPython)。您可以使用,即 gdb获取有关异常的更多信息或对其进行调试。

不会有全局硬性限制,该限制取决于您的系统(例如有多少堆栈)和涉及多少函数调用(内部)以及每个函数调用需要多少“堆栈”。

然而,这在实现中可能属于 Bug,因此将其发布到 Python 问题跟踪器上是个好主意:CPython issue tracker .

关于python - 散列嵌套元组的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45031538/

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