Python 2.7中set vs frozenset占用的内存

leb*_*dov 5 python memory size set immutability

我最近比较了Python占用的内存量与使用Pymplerset占用的内存量:frozenset

>>> from pympler.asizeof import asizeof
>>> x = range(100)
>>> s = set(x)
>>> f0 = frozenset(x)
>>> f1 = frozenset(s)
>>> asizeof(s)
10824
>>> asizeof(f0)
10824
>>> asizeof(f1)
6728
>>> f0==f1
True
Run Code Online (Sandbox Code Playgroud)

为什么frozenset从a 创建set的内存占用的内存量不同于从其他迭代中创建的内存量?或者这只是Pympler如何近似Python中变量占用的内存量的一个怪癖?

Arm*_*igo 1

这是由于 C 中的 freezeset 构造函数逻辑造成的,但它确实可能值得 CPython 错误报告。