变量的赋值

时间:2016-05-24 00:09:02

标签: python variables variable-assignment

我对python中的变量赋值问题感到困惑。我试图在互联网上查找关于pagesthis issue,但我仍然不理解。

假设我为变量指定了一个值:

v = 2

Python在某个内存位置保留了一个值为2的位置。我们现在知道如何通过为其分配变量名来访问该特定内存位置:v

如果那时,我们这样做:

v = v + 4

新的内存位置将使用值6(2 + 4)进行归档,所以现在要访问此值,我们将变量v绑定到它。

这是正确的还是完全错误的?

内存位置的初始值2会发生什么?它不再绑定到任何变量,因此无法再访问此值?这是否意味着在接下来的几分钟内,这个内存位置将被垃圾收集器释放?

感谢您的回复。

编辑:

v = 2v = v + 2只是一个简单的例子。在我的情况下,而不是2和v + 2我有一个非python本机对象,可以重量从数十兆,最多400兆字节。 我很抱歉没有在一开始就清除它。我不知道整数和其他类型的对象之间存在差异。

2 个答案:

答案 0 :(得分:3)

就这一点而言,你是对的。实际上,会发生什么是Python构造整数对象 2 4 。在第一个作业中,解释器使 v 指向 2 对象。

在第二项任务中,我们构建一个对象 6 ,并使 v 指向您,正如您所怀疑的那样。

接下来发生的事情取决于实施。大多数将对象用于偶数原子值的解释器和编译器会将 2 对象识别为一个小整数,可能会再次使用,而且维护起来非常便宜 - 所以它不会被收集。通常,代码中出现的文字不会被翻转以进行垃圾收集。

感谢您更新问题。是的,您的大型对象现在可用于GC。

答案 1 :(得分:3)

小整数(-5到256)的示例不是最好的,因为它们以特殊方式表示(例如,请参阅this)。

你对事物的流动一般是正确的,所以如果你有像

这样的东西
v = f(v)

发生以下情况:

  • 通过评估f(v)(模数小整数或文字优化)来创建新对象
  • 此新对象绑定到变​​量v
  • 以前v中的任何内容现在都无法访问,并且通常很快就会收集垃圾