首先这是我的电脑规格:
内存 - https://gist.github.com/vyscond/6425304
CPU - https://gist.github.com/vyscond/6425322
所以今天早上我测试了以下两个代码片段:
代码 A
a = 'a' * 1000000000
和代码 B
a = 'a' * 10000000000
代码 A 工作正常。但是代码 B 给了我一些错误信息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
所以我开始研究在 python 上测量数据大小的方法。
我发现的第一件事是经典的内置函数len()
。
对于代码 A 函数len()
返回 value 1000000000
,但对于代码 B 返回相同的内存错误。
在此之后,我决定在此测试中获得更高的精度。所以我从sys
模块中找到了一个名为getsizeof()
. 使用此功能,我对代码 A 进行了相同的测试:
sys.getsizeof( 'a' * 1000000000 )
结果返回是1000000037
(以字节为单位)
- 问题 1 - 这意味着
0.9313226090744
千兆字节?
所以我用单个字符检查了字符串的字节数'a'
sys.getsizeof( 'a' )
结果返回是38
(以字节为单位)
问题 02 - 这意味着如果我们需要一个由1000000000个字符组成的字符串,
'a'
这将导致 38 * 1000000000 = 38.000.000.000 字节?问题 03 - 这意味着我们需要 35.390257835388 GB 来保存这样的字符串?
我想知道这个推理的错误在哪里!因为这对我没有任何意义'-'