python变量的内存管理

python变量的内存管理

一、变量存在了哪里?

先让我们来看一段代码:

height = 100  # 定义变量
# print(100) # print会自动帮你创建一个变量100,打印完之后,马上释放100的内存空间

定义一个变量,内存就开辟一个内存空间存储这个变量

二、python的垃圾回收机制

我们先来看一段代码:

x = 10  #定义一个变量x=10
x = 11  #定义一个变量x=11

我们定义了一个变量X=10,如果我们再加上一段代码x = 11,大内存会开辟另一个小空间存储变量值11,把变量值绑定另一个x,但是由于之前有x,所以大内存会解除x与10的连接,让x与11连接。这个时候10由于没有了变量名,所以成为了python眼中的垃圾,python就会处理这个垃圾,释放10的内存占用,这就是python的垃圾回收机制。

三、引用计数(针对变量值)

我们来看一段代码

height = X  # 180的引用计数加1

x = height  # 180的引用计数加1

del x   # 释放的是引用计数,180的引用计数为1

del height # 引用计数为0,

如图所示,可以帮助大家更好理解

注意:引用计数为0时,触发垃圾回收机制,释放内存占用

四、小整数池

Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被垃圾回收机制回收。

也就是说:-5,256在python解释器启动的时候就自动开辟了,所以说他不会受垃圾回收机制的影响,适用于jupyter。
pycharm出于对性能的考虑,会扩大小整数池的范围,在其中做了优化,间隔时间短的,无论多大,id都一样。

posted @ 2019-07-29 17:24  JIAYIYAN  阅读(504)  评论(0编辑  收藏  举报