1 内存管理
1.1 变量储存
当我们定义一个变量x = 17
时,此时计算机会在内存中开辟一个空间进行存放17
这个变量值,而x
则相当于一个标识,在17
这个内存空间上络印上x
,这样我们就可以通过x
找到17
这个变量值。
1.2 Python垃圾回收机制
当变量值的引用计数值为0时,为了增加内存的使用率,Python会删除这个值,释放内存空间,如:
x = 'hades' # 'hades'的引用计数+1
y = x # 'hades'的引用计数再+1,此时'hades'的引用计数为2
print(id(y))
print(id(x))
del x, y
# 删除 x,y 这个标识,此时'hades'的引用计数-2,'hades'的引用计数为0,此时Python就会将'hades'删除,释放内存
print(id(x), id(y))
2042495349680
2042495349680
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-6-c9cba293262b> in <module>
10
11
---> 12 print(id(x),id(y))
NameError: name 'x' is not defined
1.3 引用计数
引用计数是计算机编程语言的一种内存管理技术,指内存中变量值所拥有‘标识’的个数,当这个‘标识’数为0时就会删除变量值,释放变量值占据的内存空间
1.4 小整数池
对于上一节讲的引用计数,需要注意的是:Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被回收。
x = 19
y = 19
z = 20
print(id(x))
print(id(y))
print(id(z))
1499099168
1499099168
1499099200