【发布时间】:2015-04-16 11:46:36
【问题描述】:
>>> import sys
>>> sys.getsizeof([])
32
>>> sys.getsizeof([1])
36
>>> sys.getsizeof('')
25
>>> sys.getsizeof('a')
26
>>> sys.getsizeof('cam')
28
我对引用数组和紧凑数组有一个模糊的概念。
在 Python 中,列表是引用数组,因此它们使用更多内存来存储引用元素的内存位置。
我只能从上面的例子中推断出列表中的整数占用了额外的 4 个字节(32+4)。 字符串是字符数组。一个 unicode 字符应该占 2 位。
为什么一个空字符串占25个字节?
为什么一个空列表占用 32 个字节?
【问题讨论】:
-
如果你会读C,你可能有兴趣看看List object source code
-
顺便说一句,
sys.getsizeof()返回的那些数字是 bytes 而不是 bits。一个 Unicode 字符需要超过 2 位。 :) -
如果这是 Python 2,
'a'不是 Unicode 字符串。 -
此外,Unicode 字符不应占用 2 个字节。有超过 100 万个 Unicode 字符,因此要将它们全部表示为单个代码单元,您的代码单元必须是 32 位。 (这是 UTF-32 表示。)当然你可以使用 UTF-16,但是在这种情况下,有些字符将是 2 个字节,有些是 4 个字节。或者你可以使用 UTF-8,或者任何其他编码,或者Python 3.3 使用的巧妙技巧,或者……
标签: python