MemoryError when list append... plz help
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Wed Dec 31 03:34:48 EST 2008
On Tue, 30 Dec 2008 22:02:49 -0800, [BON] wrote:
> ======================
> 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...
Your computer might have 4GB, but how much memory can Python allocate?
What operating system are you using?
Each time you are appending to the list, you append a tuple:
((i, j), sim)
where sim is a float and i and j are ints. How much memory does each of
those take?
>>> sys.getsizeof( ((0, 1), 1.1) )
32
So each entry requires 32 bytes. 60 million times 32 bytes = almost 2GB
alone. Plus the list itself will require (approximately) between 230MB
and 460MB just for the pointers.
What are you expecting to do with this enormous list, and why do you need
it all at once?
--
Steven
More information about the Python-list
mailing list