首页 > 解决方案 > 在 Python 中学习内存分配

问题描述

我正在尝试了解 Python 中的引用是如何工作的

val = 10
print(id(val))  # ID: 1234

val2 = 10
print(id(val2)) # ID: 1234

我在想,通过删除对数字的所有引用,它将释放内存,当它重新初始化时,将创建一个新的引用。

val = None
va2 = None

val = 10
val2 = 10
print(id(val))  # ID: 1234
print(id(val2)) # ID: 1234

但是,当我尝试删除对对象的所有引用10并再次初始化对象时,它指向同一个引用。关于 Python 中的内存分配,我是否对某些概念有误解?

标签: python

解决方案


缓存 -5 到 256 之间的 Python 整数。这意味着 Python 重用了相同的对象。请注意,这是一个实现细节,您不应依赖它。请参阅文档:https ://docs.python.org/3/c-api/long.html#c.PyLong_FromLong

另请注意,一旦对象被销毁,新对象可能会重用旧 id。唯一的保证是 id 在当前活动的对象中是唯一的。因此,即使在处理非缓存对象(如val = {})时,您的测试也不正确。


推荐阅读