列表和字符串的大小

时间:2016-10-17 11:34:38

标签: python python-2.7

我正在尝试以字节为单位获取列表大小,并以字节为单位获取字符串大小。

如果我们在下面看到代码的输出,则列表的大小显示为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

1 个答案:

答案 0 :(得分:2)

  1. 列表(任何列表)数据结构需要额外的维护开销才能将元素保留在其中。这一开销反映在getsizeof

  2. 的结果差异中
  3. Python字符串是text sequence type - str,而不是C字符串或类似的东西。与Python列表相同,除了单独的字符串内容之外,还涉及相关的元数据:

  4. 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
    
    1. 字符串的长度直观地定义为其中的字符数。