为什么FrozenList与元组不同?

22 投票
1 回答
17220 浏览
提问于 2025-04-19 22:21
from pandas.core.base import FrozenList

Type:        type
String form: <class 'pandas.core.base.FrozenList'>
File:        /site-packages/pandas/core/base.py
Docstring:
Container that doesn't allow setting item *but*
because it's technically non-hashable, will be used
for lookups, appropriately, etc.

为什么不直接用元组呢?那FrozenList能提供什么额外的功能呢?

1 个回答

27

这是一个内部的pandas结构。之所以不使用元组,是因为:

  • 它继承自一个常见的pandas类
  • 它是可定制的(比如可以自定义显示方式)
  • 它并不具备元组的所有功能(有些功能被禁用了)
  • 它不能被哈希(所以更像是列表,而不是元组)

这个结构用来表示多重索引的层级、标签和名称。这样做的目的是为了防止通过属性来修改这些内容,而是强制使用方法(比如 set_levels())。因为这些状态不能单独改变(对于层级/标签),而必须一起改变。

这些是“公共”的属性,所以需要一个访问机制来完成所有这些操作(如果有必要,内部也可以进行更改,以提高性能)。

撰写回答