栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 内存管理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 内存管理

油鹳视频笔记

1. Python 101 # Memory management
RAM 中,存在 heap 堆 和 stack 栈两个内存区域:

Python 中的一切都是对象。堆中存放对象,例如,代码中的字符串"B"以及整数 4, 都存放在堆中。


执行语句 student_grade = "B" 时,Python 将字符串"B" 存在堆中,但是在栈中,创建一个指向该字符串对象的引用, student_grade 仅仅持有指向该对象的引用,而非该实际对象。

以字符串 "hello" 为例,5000 是 memory adddress,s 和 ss 两个变量指向同一个对象:

id 函数返回堆中对象的地址:

word1 = "programming"
word2 = "programming"

print(id(word1))
print(id(word2)) 
print(word1 is word2)

word1 和 word2 指向同一个对象:

2213115640112
2213115640112
True

每个对象都有一个引用计数 reference count, 计算有多少变量在引用它。如果引用计数大于0,对象存在于内存中。如果引用计数降到0,那么 garbage collector 将在 heap 中对该对象解除分配 deallocate


如下的代码,number 变量先后指向不同的对象,id 发生改变:

number = 39
print(id(number))  # 1880855545264

number = number + 1
print(id(number))  # 1880855545296

number 指向新的值 40 之后,39 的引用计数变成 0,变成 dead object,垃圾回收器从堆中立即将其移除,与之相比较,Java 使用 mark-and-sweep 算法周期性移除 dead object

  1. Memory Allocation and Management in Python

Python 是一种动态类型的语言,例如变量 z 一开始指向整数 10, 后来又指向一个 Car 对象:

Python 与 静态类型语言如 Java/C 等的对比:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号