Python内存管理

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
posted @ 2019-05-05 15:16  蔚蓝的爱  阅读(156)  评论(0编辑  收藏  举报