为什么FrozenList与元组不同?

dmv*_*nna 12 python pandas

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.
Run Code Online (Sandbox Code Playgroud)

为什么不只使用元组?FrozenList提供了哪些额外的功能?

Jef*_*eff 19

这是一个内部熊猫构造.不使用元组因为:

  • 它继承自一个普通的pandas类
  • 它可定制(例如repr)
  • 它没有元组的所有功能(有些是禁用的)
  • 它不可用(所以更像是列表而不是元组)

该构造用于表示MultiIndex级别,标签和名称.其重点是防止修改这些直通属性并强制使用方法(例如set_levels()).由于这些状态不能独立改变(对于水平/标签),但必须一起改变.

这些都是"公共"属性,因此它需要一种可以执行所有这些操作的访问机制(但出于性能原因,仍然可以在必要时进行内部更改).

  • 我知道它说它不耐用,但是:`hash(pd.core.base.FrozenList((1,2,3)))`给了我`2528502973977326415`(重复一个截然不同但相同的`FrozenList`给了我相同的哈希). (3认同)
  • 是的,关键是允许它在内部可修改,但不是由用户(类似于``.readonly``标志的创建). (3认同)