我有两个小程序:
1
x = 1000
while (1000 * x != x):
x = 1000 * x
print("Done")
2
x = 1000.0
while (1000.0 * x != x):
x = 1000.0 * x
print("Done")
我试图对这些程序的执行方式做出明智的猜测。我认为整数存储在4个字节(32位)中,第一个程序将执行循环,直到x达到2 ^ 31,然后可能会发出错误。我猜测第二个循环会永远存在,因为浮点数可以存储比int更多的信息。
我的猜测不会再错了。第一个似乎永远存在,而第二个存在循环并打印"完成"在x达到大约10 ^ 308之后 - 这是x取值inf(可能是无限的)。
我无法理解这是如何运作的,任何解释都会受到赞赏。谢谢!
答案 0 :(得分:2)
带有整数的第一个示例将循环,直到没有可用内存(在这种情况下,进程将停止或机器将切换为死亡):
x = 1000
while (1000 * x != x):
x = 1000 * x
因为整数在python中没有固定大小,所以只使用所有内存(在进程地址范围内)。
在第二个示例中,您将浮点值乘以 一个限制,因为它使用处理器浮点,8个字节(python {{1}通常使用C float
类型)
达到最大值后,溢出到double
(无限),在这种情况下
inf
小型互动演示:
1000 * inf == inf
答案 1 :(得分:1)
当用整数值初始化变量时,该值变为整数对象,变量指向它(引用对象)。
Python消除了这种混淆,只有整数对象。它有任何限制吗?非常早期的Python版本有一个限制,后来被删除。现在的限制是由计算机中的内存量设置的。如果你想创建5000位数的天文整数,请继续。打字或阅读它将是唯一的问题! Python如何做到这一切?它自动管理整数对象,最初设置为32位速度。如果它超过32位,那么Python会根据需要增加其大小,直到达到RAM限制。
因此,只要您的计算机具有RAM,示例1就会运行。