【问题标题】:Do more unnecessary variables in Python mean more memory usage?Python中更多不必要的变量是否意味着更多的内存使用?
【发布时间】:2018-08-17 05:15:27
【问题描述】:

假设我有一些这样的代码:

default_pos = (21,45)
#I do some more stuff now, then change my mind to change the default_pos
#So, I overwrite default_pos and assign something else to it
default_pos = (756,600)

如果我声明了一个名为default_pos_changed 的新变量而不是这个变量,而让旧变量保持原样呢?那将意味着一个不必要的变量。那么,它不会占用比需要更多的内存吗?现在,如果有数百个这样的未使用变量,那可能是个问题,对吧?

【问题讨论】:

  • 你刚刚改了帖子问了一个完全不同的问题:(
  • 抱歉,有点不清楚
  • 答案不是取决于语言,而是取决于解释器。 CPython, PyPy, IronPython, ...?
  • 我正在使用 CPython,不喜欢 IronPython 的声音。使用 CPython 一年多了。永远不要头疼
  • 变量:变量仅在运行时已知,除非它们是全局变量或常量。堆内存分配方案用于管理运行时变量的内存分配和解除分配。 link

标签: python variables memory memory-management


【解决方案1】:

你所谓的变量实际上是一个对象的引用。因此,使用像 default_pos_changed 这样的新变量会消耗一些内存。但是,只有存储引用的内存,而不是对象本身。

您可以查看 GitHub 上的 C implementation of Pythonreference 本质上是一个指针(和附加信息),因此它的大小大约是指针的大小。在 64 位机器上它是 8 个字节。与引用的对象大小相比,它很小。

编辑

你可以使用del来释放内存:引用被删除,如果一个对象的引用数为nul,根据垃圾收集器规则,对象分配的内存也可以释放。

del default_pos_changed. # free the reference memory
del default_pos. # free the reference memory, the object can be garbage collected.

【讨论】:

  • 但是,保留一堆变量,尤其是在全局范围内,意味着它们引用的对象不会被释放。可能值得一提。但是,是的,即使是数百个“不必要的”变量也只会占用几千字节,这是一个很好的观点。
  • 谢谢,我已经知道del,我只是对变量感到好奇。
猜你喜欢
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2012-11-21
  • 2016-02-03
  • 2011-05-27
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多