重新分配会从Python中的内存中删除以前的值吗?

ddl*_*dlj 1 python memory memory-management

>>p = 5
>>id(p)
140101523888800
>>p = 5.56
>>id(p)
140100617985840
Run Code Online (Sandbox Code Playgroud)

我知道在将新值分配给现有变量时,它指向存储新值的内存中的新位置.但我的问题是,包含先前值的内存位置是否5仍然存在?如果是,在重新分配后是否会导致内存溢出?

mgi*_*son 5

如果没有指定特定的python版本/实现,你不能真正问这样的问题.如果你在谈论参考实现(CPython),你可以看一下这个参考或者这个参考用于python3.x.

特别:

重要的是要理解Python堆的管理是由解释器本身执行的,并且用户无法控制它

因此,无法回答内存位置是否仍然有效.我们可以谈论的是垃圾收集器是否会收集对象.由于CPython依赖于引用计数,因此当您为其指定不同的值时p,原始值上的引用计数会减1.如果该引用计数降至零,则垃圾收集器将收集该对象.这意味着内存位置可用于某些其他对象,或者可能是python将该内存返回给操作系统.作为用户,您无法控制python解释器将采取哪些操作(或何时).

基本上,python解释器负责处理防止内存泄漏/内存溢出等所需的所有细节.作为python程序员,您不必担心这些细节,就像您需要担心这些细节一样你是用像C这样的低级语言编写的.