Python 内存错误的可能性?

Python 内存错误的可能性?,python,memory,Python,Memory,上述代码中是否存在内存错误的可能性?这段代码运行在一台服务器上,服务器是一台运行32位Ubuntu(Ubuntu12.04 LTS)的四核Xeon机器。在少数情况下,其工作正常,并且在少数情况下显示内存错误。仅供参考:我不知道他们正在测试的案例,但输入是小写字母。输入大小仅用于数据的内存量为1+2+3…+n-2+n-1+n,其中n是输入的长度,换句话说,len(a)。结果是(n+1)*n/2。如果n是10000,则计算出大约50MB的字符串数据加上python字典用来存储10000个条目的RAM

上述代码中是否存在内存错误的可能性?这段代码运行在一台服务器上,服务器是一台运行32位Ubuntu(Ubuntu12.04 LTS)的四核Xeon机器。在少数情况下,其工作正常,并且在少数情况下显示内存错误。仅供参考:我不知道他们正在测试的案例,但输入是小写字母。输入大小仅用于数据的内存量为1+2+3…+n-2+n-1+n,其中n是输入的长度,换句话说,
len(a)
。结果是(n+1)*n/2。如果n是10000,则计算出大约50MB的字符串数据加上python字典用来存储10000个条目的RAM。在我的OSX盒上进行测试,这似乎很小,事实上,如果我在上面运行此代码,过程显示使用了53.9 MB:

a=raw_input()
prefix_dict = {}
for j in xrange(1,len(a)+1):
    prefix = a[:j]
    prefix_dict[prefix] = len(prefix)
print prefix_dict
我看不出你的代码有任何明显的错误,当我在一个10000个字母长的字符串上运行它时,它会很高兴地吐出大约50mb来输出,所以一定是出了什么问题


top
显示进程的内存使用情况是什么?

也许一段较小的代码会有帮助:

str = "a"
d = {}
for i in xrange(10000):
    d[str] = i
    str = str + "a"

为什么呢一对字节码指令需要更多的字节;显然,与存储的数据量相比,这是不可能的小。@delnan:也就是
前缀
,因为中间存储被废弃了。可能垃圾收集器在循环期间不工作,然后大约5000*10000字节被保存在内存中。Refcounting总是在工作,循环GC不关心Python循环。但是这并不重要,因为
前缀
所指的字符串仍然可以访问,当然是因为
predix_dict
。特别是如果您在开始之前分配了大量大型对象。稍微偏离主题,但在本代码中,
len(prefix)
将始终等于
j
。没有必要做
len(前缀)
。我有个问题。raw_input()读入的内容是否可以变为惰性,您将如何做到这一点?
prefix_dict = { a[:j]:j for j in xrange(1, len(a) + 1) }