Python内存管理
[TOC]
垃圾回收
动态语言:
- 对象和类型和内存都是运行是确定(内存地址分配是在运行是自动判断变量类型并对变量赋值)
引用计数
- 每个对象都维护一个指向该对象的引用计数
a = 1
b = 1
id(a) = 内存地址数
id(b) = 相同的内存地址数
- Python只会缓存整数和短小的字符,对于其它非整数和短小的字符的对象,创建一个新的对象
a = 'this is a string'
b = a
print (a is b)
#return False
- 引用计数
- 使用`from sys import getrefcount`导入包
- 需要注意的是,当使用某个引用作为参数,传递给getrefcount()时,参数实际上创建了一个临时的引用。因此,getrefcount()所得到的结果,会比期望的多1
- 对象引用对象
Python的一个容器对象(container),比如表、词典等,可以包含多个对象。实际上,容器对象中包含的并不是元素对象本身,是指向各个元素对象的引用。