尝试运行此代码时消耗大量内存

Mar*_*nek 2 python

在尝试运行此代码时:

l = 1000000
w = [1, 1]
for i in range(2, l):
    w.append(w[-1] + w[-2])
Run Code Online (Sandbox Code Playgroud)

电脑挂起,蓝屏死机出现.我得到的唯一信息是关于记忆管理.问题出现在Python 2.7和3.4版本中.

代码适用于l = 100000.

有人能解释我究竟是为什么吗?我在Active Python中使用64位64位,Python 2.7.8 64位.

编辑:

这是R代码,效果很好:

len <- 1000000
fibvals <- numeric(len)
fibvals[1] <- 1
fibvals[2] <- 1
for (i in 3:len) { 
   fibvals[i] <- fibvals[i-1]+fibvals[i-2]
} 
Run Code Online (Sandbox Code Playgroud)

use*_*ica 6

你所产生的数字比你想象的还要多.例如,这是最后一个内存的大小:

>>> a, b = 1, 1
>>> for i in xrange(2, 1000000):
...     a, b = b, a+b
...
>>> sys.getsizeof(b)
92592
Run Code Online (Sandbox Code Playgroud)

对于一个整数,这是92千字节.所有这些放在一起的位置在46-ish千兆字节附近,而你只有16千兆字节.

你的R代码使用了64位浮点数,它在第1476个数字附近迅速溢出到无穷大.