2015-08-31 21 views
0

如果一些作品与nltk和做了空列表更大的NLTK

from nltk.book import * 

,她会发现,text1object size的64 bytes做一个

import sys 
sys.getsizeof(text1) 

text1是一个你刚才输入的books。如果现在她做了

text1 = [] 

text1的大小增加到72!这是为什么?为什么一个空列表比我的机器中的先前对象形式占用更多内存?

有没有人知道这件事?谢谢

+0

第一次运行'sys.getsizeof'时,'text1'是什么? (我没有发现这一切令人惊讶;我只是想澄清。) –

+0

'text1'是你刚才用这个语句导入的书籍之一。这是一个[默认](http://www.nltk.org/book/ch01.html)导入nltk – pebox11

回答

1

这里有一些事情正在进行,但主要是这只是对getsizeof输出的误解。

从文档:

所有内置对象将返回正确的结果,但这不必持有第三方扩展真实,因为它是特定的实现。 (重点煤矿)

我们可以看到这个工作表(注意值是在我的32位虚拟机不同):

In [7]: sys.getsizeof([1]) 
Out[7]: 36 

In [8]: sys.getsizeof([1, 2, 3]) 
Out[8]: 44 

然而,nltk.text.Text对象似乎并没有报告其大小正确:

In [9]: sys.getsizeof(text1) 
Out[9]: 28 

In [10]: sys.getsizeof(text1.tokens) 
Out[10]: 1173740 

该文档还提到一个recursive recipe,你可以尝试,如果你有兴趣找出nltk对象的实际内存占用你的SY干。

+0

谢谢'双位炼金术士 – pebox11