python - 在 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 中的内存分配,我是否对某些概念有误解?
解决方案
缓存 -5 到 256 之间的 Python 整数。这意味着 Python 重用了相同的对象。请注意,这是一个实现细节,您不应依赖它。请参阅文档:https ://docs.python.org/3/c-api/long.html#c.PyLong_FromLong
另请注意,一旦对象被销毁,新对象可能会重用旧 id。唯一的保证是 id 在当前活动的对象中是唯一的。因此,即使在处理非缓存对象(如val = {}
)时,您的测试也不正确。
推荐阅读
- couchbase - Couchbase 分析:无结果和 couchbase 内部服务器错误,索引具有 UNIXTIME 毫秒时间戳
- java - JBOSS EAP 7.1 部署错误 - 操作数堆栈上的类型错误
- oop - 使用通用 ViewModel 设计应用程序
- r - R 4.0.1 上函数和 S4 泛型的错误处理不一致
- list - 如何在 PROLOG 中的谓词列表中查找值
- react-native - React Native:Stack Navigator 中不同屏幕的不同标题
- laravel - laravel 父子关系与三张表
- postgresql - 类型错误:+ 不支持的操作数类型:“int”和“RowProxy”
- powershell - Powershell 脚本获取 AD 组报告
- html - 在发送到客户端之前修改 Grails 3 中响应的呈现字符串