为什么我在python中收到这个程序的内存错误?

2024-05-18 23:40:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的初学者,正在从事一个初学者编程项目,我想:

估计一立方英里巧克力冰淇淋的热量。 注意:一英里有5280英尺,一立方英尺的巧克力冰淇淋含有大约48600卡路里。你知道吗

我的代码:

Onemile = 5280
cubicmile = 5280**3
calories = 48,600
print("Number of calories per cubic mile:",cubicmile*calories)

输出:

Traceback (most recent call last):

  File "<ipython-input-100-90c2410fa01f>", line 4, in <module>
    print("Number of calories per cubic mile:",cubicmile*calories)

MemoryError

为什么会这样?我构建这个等式的方式有问题吗?你知道吗


Tags: of项目代码number编程printtraceback热量
2条回答

如前所述,问题是行calories = 48,600。你知道吗

问题是,由于右侧的,,这与calories = (48, 600)相同,后者是tuple。对于元组,乘法意味着“重复元组n次”。例如2 * (48, 600) == (48, 600, 48, 600)。你知道吗

但是既然你做了5280**3 * calories,这就是试图分配一个包含2 * 5280**3 = 294395904000元素的元组,它看起来太大了,无法放入你的内存(假设每个值64位,这将是2.14tib,比大多数人的内存都大)。你知道吗

请注意,在Python 3.6+中,可以使用_作为千的分隔符:

calories = 48_600

您正在尝试打印元组(48, 600)(这是您在编写calories = 48,600147197952000次时得到的结果。你知道吗

您的输出将是:

Number of calories per cubic mile: (48, 600, 48, 600, 48, 600, ... , 48, 600)

你的电脑根本无法处理你想一次转储的大约1324781568000个字符。你知道吗

与其使用,作为千位分隔符,您应该只写48600。你知道吗

Onemile = 5280
cubicmile = 5280**3
calories = 48600
print("Number of calories per cubic mile:",cubicmile*calories)

输出:

Number of calories per cubic mile: 7153820467200000

编辑:

实际上,并不是打印或创建这么大的字符串失败了,因为至少对我来说,Python在尝试创建指向元组的147197952000指针时会耗尽内存,您可以通过只运行(48,600) * 147197952000来测试。你知道吗

相关问题 更多 >

    热门问题