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

不羁岁月 提交于 2020-05-25 19:25:12

问题


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.


回答1:


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.)




回答2:


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



来源:https://stackoverflow.com/questions/10019442/python-is-the-old-memory-freed-when-a-variable-is-assigned-new-content

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!