我正在尝试以字节为单位获取列表大小,并以字节为单位获取字符串大小。
如果我们在下面看到代码的输出,则列表的大小显示为52 bytes
,当我加入列表并检查大小时,输出为35 bytes
。最后我试图获得字符串"Iamtestingsize"
的大小,输出又是35 bytes
。那么," join"之后的字符串大小字符串大小" Iamtestingsize"是一样的。
我在这里有两个问题:
1)为什么列表的大小显示不同的输出?另外,如果您对如何获取列表内容的大小有任何想法,请告诉我。
2)我想,1个字节== 1个字符,我期待字符串的大小msgstr和字符串将显示为14个字节而不是35个。如果我在这里遗漏了什么,请告诉我?
3)当我对列表和字符串执行len()时,对于msgstr和字符串 - 返回了14,而列表的长度返回4,这是我所期望的。
import sys
list = ['I', 'am', 'testing', 'size']
print sys.getsizeof(list)
msgstr = "".join(list)
print "size of msgstr is " + str(sys.getsizeof(msgstr))
print msgstr
string = "Iamtestingsize"
print "size of str is " + str(sys.getsizeof(string))
print len(list)
print len(msgstr)
print len(string)
Output:
52
size of msgstr is 35
Iamtestingsize
size of str is 35
4
14
14
注意:我使用的是python 2.7
答案 0 :(得分:2)
列表(任何列表)数据结构需要额外的维护开销才能将元素保留在其中。这一开销反映在getsizeof
。
Python字符串是text sequence type - str,而不是C字符串或类似的东西。与Python列表相同,除了单独的字符串内容之外,还涉及相关的元数据:
Python 2.7.10 (default, Jul 30 2016, 18:31:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getsizeof(b'asd')
40
>>> sys.getsizeof('asd')
40
>>> sys.getsizeof(u'asd')
56