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