MemoryError when list append... plz help

Francesco Bochicchio bockman at virgilio.it
Wed Dec 31 03:31:57 EST 2008


[BON] ha scritto:
> ======================
> s=[]
> for i in range(11000-1): 
>     for j in range(i+1, 11000): 
>         ....
>         s.append(((i,j),sim)) 
> ======================
> above sim is floating type.
> s.append is totally coducted 60,494,500 times.
> but this code raise MemoryError.
> 
> My computer has 4G RAM.
> i think it's enough. but it doesn't...
> 
> So, i've tested below code.
> ======================
> a=[] 
> i=0 
> while i<60494500 : 
>     a.append(i) 
>     i+=1
> ======================
> but this code raise also MemoryError.
> 
> How can i resolve this problem?
> please, help...
> 
> Regards,


If you _really_ have to store so many numbers in memory (hint: if you 
are processing them sequentially, you don't need to store all them - use
generators instead) then you may have better luck using mmap module to
create a huge file-memory object, that you can access both as a file and 
as a list, and put numbers in it after packing/unpacking with struct.
Something like this (only marginally tested ):

 >>> memory = mmap.mmap(-1, 60494500*4)
 >>> def memory_put(offset, f):
...     memory[offset*4:(offset+1)*4] = struct.pack( "%f", f )
  >>> def memory_get(offset):
...     return struct.unpack( "f", memory[offset*4:(offset+1)*4] )[0]
 >>> memory_put(12, 3.14 )
 >>> memory_get(12)
3.1400001049041748

Ciao
------
FB




More information about the Python-list mailing list