【发布时间】:2015-11-24 17:15:50
【问题描述】:
好吧,这个错误几乎肯定是我的,而不是 Python 的,但是我遇到了一些代码,可以用来显示为各种变量分配了多少内存,并看到了一个令人费解的结果。代码如下:
import sys
def show_sizeof(x, level=0):
print "\t" * level, x.__class__, sys.getsizeof(x), x
if hasattr(x, '__iter__'):
if hasattr(x, 'items'):
for xx in x.items():
show_sizeof(xx, level + 1)
else:
for xx in x:
show_sizeof(xx, level + 1)
它似乎接受一个变量,然后返回它的类、为其分配的内存量及其值。如果对象是可迭代对象,则此方法会在该可迭代对象的所有成员上递归调用自身。
现在当我尝试这个时(在我的 64 位机器上):
>>> show_sizeof(('a', 213))
<type 'tuple'> 72 ('a', 213)
<type 'str'> 38 a
<type 'int'> 24 213
我看到已为我的元组分配了 72 个字节,但只使用了 62 个(= 38 + 24)。这是有道理的。但是,当我向元组添加另一个元素时,我看到了:
>>> show_sizeof(('a', 213, 1))
<type 'tuple'> 80 ('a', 213, 1)
<type 'str'> 38 a
<type 'int'> 24 213
<type 'int'> 24 1
元组使用 80 个字节,但它的成员似乎需要 86 个字节(= 38 + 24 + 24)。元组不应该至少需要 86 个字节吗???
【问题讨论】: