Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: is the "old" memory free'd when a variable is assigned new content?

If a variable is assigned any new content, will the memory allocated for the "old content" be "properly" free'd? For example, in the following script, will the memory for variable "a" as an array of zeros be free'd after "a" is assigned some new stuff

import numpy
a = numpy.zeros(1000)
a = a+1

I would imaging Python is smart enough to do everything cleanly, using the so-called 'garbage collection', which I never really be able to read through. Any confirmation? I'd appreciate it.

like image 543
Liang Avatar asked Apr 04 '12 21:04

Liang


2 Answers

Eventually, the old memory will be freed, though you cannot predict when this will happen. It is dependent on the Python implementation and many other factors.

That said, for the example you gave and the CPython implementation, the old array should be garbage collected during the assignment.

(Note that NumPy arrays are a particularly complex example for discussing garbage-collector behaviour.)

like image 97
Sven Marnach Avatar answered Nov 03 '22 08:11

Sven Marnach


You can find the answer by playing with gc module (and probably finetuning). It provides the ability to disable the collector, tune the collection frequency, and set debugging options. It also provides access to unreachable objects that the collector found but cannot free. See http://docs.python.org/library/gc.html

like image 3
Maksym Polshcha Avatar answered Nov 03 '22 08:11

Maksym Polshcha