我总是使用Python而不考虑它的内存管理。但是,我对它如何处理内存有一个很大的疑问。
def func1():
local_var = 1
print(id(local_var)) # memory address of local_var (stored in stack variable) -> 1
return local_var
# value copied, and local_var_different_scope points another memory address
local_var_different_scope = func1()
print(id(local_var_different_scope)) # -> 2
local_var_different_scope = 2
print(id(local_var_different_scope)) # -> 3
#include <stdio.h>
int main() {
int a = 1;
printf("%p\n", &a);
a = 2;
printf("%p\n", &a); // same as above!
return 0;
}
如果您建议任何材料来深入了解这个问题,我将不胜感激。谢谢!
在Python中,所有赋值都是对对象的引用 - 在你的例子中是整数对象(Python中的一切都是对象!)
因此,在此代码片段中,您创建了一个
1
(id=xyz
) 对象并将该对象 (id=xyz
) 返回给 local_var_different_scope
。因此 local_var_different_scope
现在引用 id=xyz
对象(这是您创建的整数 1
)。
def func1():
local_var = 1
print(id(local_var)) # memory address of local_var (stored in stack variable) -> 1
return local_var
然后,您将
local_var_different_scope
重新分配给 reference 一个新的整数对象 2
(id=abc
)。当然,id
的2
与1
不同。
希望这有帮助!