什么是免费列表(PyDict_ClearFreeList引用)?

时间:2017-02-25 13:07:41

标签: python dictionary python-c-api python-internals

Python字典有一个名为PyDict_ClearFreeList的C API函数。然而,文档字符串相当稀疏:

  

int PyDict_ClearFreeList()

     

清除免费列表。返回已释放项目的总数。

     

版本3.3中的新功能。

此函数没有参数,因此它(可能)与任何特定字典无关。

它返回int。这看起来很奇怪,因为这表明它引用了一些C状态,因为python"类"始终有Py_ssize_t大小。

这究竟是什么"免费列表"?

1 个答案:

答案 0 :(得分:2)

你是对的,自由列表与任何特定字典无关;实际上,它适用于众多数据类型(例如PyFloat_ClearFreeList)。

自由列表是Python保存可以放置东西的空闲列表的位置 - 即包含不再使用的对象的内存,但它没有释放回全局Python内存池或系统。 / p>

this useful Theano tutorial

  

为了加速内存分配(和重用),Python使用了许多   小对象的列表。每个列表都包含相似的对象   size:对象的大小为1到8个字节,一个用于9   当需要创建一个小对象时,我们要么重用一个   列表中的空闲块,或者我们分配一个新块。