油鹳视频笔记
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
- Memory Allocation and Management in Python
Python 是一种动态类型的语言,例如变量 z 一开始指向整数 10, 后来又指向一个 Car 对象:
Python 与 静态类型语言如 Java/C 等的对比:



