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

时间:2017-01-14 04:41:44

标签: python memory memory-management

>>p = 5
>>id(p)
140101523888800
>>p = 5.56
>>id(p)
140100617985840

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

2 个答案:

答案 0 :(得分:5)

如果没有指定特定的python版本/实现,你就无法提出这样的问题。如果你正在谈论参考实现(CPython),你可以查看py {@}的referencethis one

具体做法是:

  

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

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

基本上,python解释器会处理防止内存泄漏/内存溢出等所需的所有细节。作为一名python程序员,您不必像所需的那样担心这些细节。如果您使用C等较低级别的语言进行编码,请担心它们。

答案 1 :(得分:-1)

基本上,您需要了解变量是如何引用该值的。分配值时,它并不拥有该值。如果变量p引用5,它只是表示它有5个。一旦你重新引用5.56,你的元素5就会消失,只会引用新元素。确保了解它是如何被引用的。

>>p = 5 #variable p is referencing to value 5
>>id(p) 
140101523888800 
>>p = 5.56 #same variable p is referencing to the new value 5.56
>>id(p)
140100617985840