【问题标题】:Will the reassignment delete the previous value from the memory in Python?重新分配会从 Python 的内存中删除以前的值吗?
【发布时间】:2017-01-14 04:41:43
【问题描述】:
>>p = 5
>>id(p)
140101523888800
>>p = 5.56
>>id(p)
140100617985840

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

【问题讨论】:

标签: python memory memory-management


【解决方案1】:

如果不指定特定的 python 版本/实现,你真的不能问这样的问题。如果您在谈论参考实现(CPython),您可以查看此referencethis one for python3.x。

具体来说:

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

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

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

【讨论】:

  • 谢谢。我指的是 Python 3.5 版
【解决方案2】:

基本上,您需要了解变量是如何引用到值的。当您分配值时,它并不拥有该值。如果变量 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

【讨论】:

  • 这根本不能回答问题。
  • 我说的是和删除之前的值无关
猜你喜欢
  • 1970-01-01
  • 2011-08-22
  • 2013-09-21
  • 1970-01-01
  • 2012-03-31
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
相关资源
最近更新 更多