Pandas定义了一个FrozenList
对象,在其文档中描述为
[c] ontainer不允许设置项目但,因为它在技术上不可清除,将用于查找,适当等等。
我不明白拥有一个不可变但不可清洗的容器有什么好处。有人能给我一个例子,标准Python元组的可用性会导致问题?
this similar question 的答案没有任何理由为什么人们想要一个不可变但不可用的容器。特别是,它没有解释为什么Python元组的 hashability 使它不适合FrozenList
被用于的任何任务。因此,
答案 0 :(得分:1)
这个类确实有点令人困惑,因为关于这个问题的讨论表明它可以通过pandas内部变化,但我不知道这种能力是如何被实际使用的。不可取消没有特别的好处。好处是该对象是可变的(尽管,同样,该问题表明,它只能通过C内部,而不是通过Python代码可变)。如果一个对象是可变的,则它不能是可以清除的。 (或者更确切地说,它的哈希值不能取决于它的可变状态;对于像list / tuple这样的对象,除了它的可变内容之外没有真正的状态,如果它是可变的,那么没有明智的方法可以使它成为可散列的。)
此外,源代码中还有以下评论:
# Sidenote: This has to be of type list, otherwise it messes up PyTables
# typechecks
正如另一个问题所说,还有其他原因使用自定义类而不是元组。例如,FrozenList具有自定义__repr__
。
基本上,似乎没有写出类,因为有人认为“我需要一个不可变但不可容纳的容器”。相反,它似乎是因为有人认为“我需要一个可变的类,但只是秘密的,我需要能够为它提供自定义方法,我需要它成为list
的子类避免破坏其他图书馆。“关于其他问题/答案的一些评论表明,不可行性本身可能永远不是必要的标准,即使是,由于熊猫如何工作的其他变化,它可能不再是必要的。我没有写过课程,所以我不能确定,但在我看来,你在问题中引用的评论误导了真正的动力是什么让这样的课程。