[英]Memory Error in Python despite 0.5 GB RAM left
我在Python程序中使用Eratosthenes筛子来查找主要因素。 这是代码-
import time
import sys
p=[]
def sieve(n):
p.append(False) # 0 isn't prime
p.append(False) # 1 isn't prime
i=2
while (i<=n):
if i%2==0:
p.append(False)
else:
p.append(True)
i+=1
#creating a sieve and putting even numbers as false and odd as true
#Even numbers can never be prime except 2 which will now become true
p[2]=True
sq=int(n**0.5) #storing square root of n
i=3
while (i<=sq):
k=i*i
while k<=n:
p[k]=False
k+=(2*i)
i+=2
def primefactors(n,x):
print "The prime factors are : "
if(n%2==0):
print 2
while(n%2==0):
n/=2
i=3
while(i<len(p)):
if(n==1):
break
if(p[i]):
if(n%i==0):
print i
while(n%i==0):
n/=i
i+=2
if n==x:
print None
elif n!=1:
print n
def main ():
print "Enter number to be factored "
n=raw_input()
n=int(n)
start=time.clock()
sieve(n**0.5+1)
primefactors(n,n)
end=time.clock()
print "Seconds : "+str(end-start)
main()
现在,当我尝试分解18位数字时,在创建列表时收到内存错误。 但是,Windows任务管理器显示仅使用了1.48 GB RAM,而我有大约2.2 GB可用RAM。 这背后的原因是什么?
发生内存错误时,我添加了任务管理器的屏幕截图。(目前无法发布图像,因此此处是链接-Image )
另外,我知道还有其他方法可以更快地分解素数,但是我只想知道为什么在完全利用RAM之前发生这种内存错误。
因此,在32位系统上,python列表的最大大小为536,870,912个元素。
python正在为您的列表保留连续空间。 如果您的列表已增加到保留空间,则python会分配更大的空间,并将您的元素复制到新位置。 当您的列表已增加到可用内存的一半时,此大小调整最后一次失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.