I am trying to understand the reason for the following MemoryError. Is there some pre-defined limit on dictionaries in python?
self.text is long string read in from a file (about 4.5 MB)
L is equal to 4641652
L = len(self.text)
test = {}
for i in xrange(L,0,-1):
try:
test[i] = self.text[i-1:]
except MemoryError:
print "Memory Error at the " + str(i) +"th iteration!"
print sys.getsizeof(test)
print len(test)
exit()
Output
Memory Error at the 4577890th iteration!
1573004
63762
I am running the program on a windows machine with 16gb of ram if that helps.
解决方案
You are storing 1 + 2 + 3 + ... + 4641650 + 4641651 + 4641652... bytes in your loop. By the iteration in question, you have gone around 63762 times, which is 2032796322 bytes. One more doubline and lo and behold, you are over the 32 bit integer limit, which seems like a reasonable place to run into a memory error to me.