vys*_*ond 0 python string size python-2.7
首先这是我的电脑规格:
内存 - 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千兆字节来保存这样的字符串?
我想知道这个推理中的错误在哪里!因为这对我没有任何意义' - '
Python对象具有最小的大小,即将几个簿记数据附加到对象的开销.
Python str对象也不例外.看一下没有,一,二和三个字符的字符串之间的区别:
>>> import sys
>>> sys.getsizeof('')
37
>>> sys.getsizeof('a')
38
>>> sys.getsizeof('aa')
39
>>> sys.getsizeof('aaa')
40
Run Code Online (Sandbox Code Playgroud)
str我的机器上的Python 对象开销是37个字节,但字符串中的每个字符只占固定开销的一个字节.
因此,str具有1000万个字符的值需要1000万字节+ 37字节的内存开销.这确实是大约0.931千兆字节.
您的示例代码'B'创建了十倍多的字符,因此您需要将近10 GB的内存来保存一个字符串,不包括Python的其余部分,操作系统以及该计算机上可能运行的其他任何内容.
| 归档时间: |
|
| 查看次数: |
2242 次 |
| 最近记录: |