我对python中的变量赋值问题感到困惑。我试图在互联网上查找关于pages的this issue,但我仍然不理解。
假设我为变量指定了一个值:
v = 2
Python在某个内存位置保留了一个值为2
的位置。我们现在知道如何通过为其分配变量名来访问该特定内存位置:v
如果那时,我们这样做:
v = v + 4
新的内存位置将使用值6
(2 + 4)进行归档,所以现在要访问此值,我们将变量v
绑定到它。
这是正确的还是完全错误的?
内存位置的初始值2
会发生什么?它不再绑定到任何变量,因此无法再访问此值?这是否意味着在接下来的几分钟内,这个内存位置将被垃圾收集器释放?
感谢您的回复。
编辑:
v = 2
和v = v + 2
只是一个简单的例子。在我的情况下,而不是2和v + 2我有一个非python本机对象,可以重量从数十兆,最多400兆字节。
我很抱歉没有在一开始就清除它。我不知道整数和其他类型的对象之间存在差异。
答案 0 :(得分:3)
就这一点而言,你是对的。实际上,会发生什么是Python构造整数对象 2 和 4 。在第一个作业中,解释器使 v 指向 2 对象。
在第二项任务中,我们构建一个对象 6 ,并使 v 指向您,正如您所怀疑的那样。
接下来发生的事情取决于实施。大多数将对象用于偶数原子值的解释器和编译器会将 2 对象识别为一个小整数,可能会再次使用,而且维护起来非常便宜 - 所以它不会被收集。通常,代码中出现的文字不会被翻转以进行垃圾收集。
感谢您更新问题。是的,您的大型对象现在可用于GC。
答案 1 :(得分:3)
小整数(-5到256)的示例不是最好的,因为它们以特殊方式表示(例如,请参阅this)。
你对事物的流动一般是正确的,所以如果你有像
这样的东西v = f(v)
发生以下情况:
f(v)
(模数小整数或文字优化)来创建新对象v
v
中的任何内容现在都无法访问,并且通常很快就会收集垃圾