python变量垃圾回收机制的入门使用
简介:
Python是一款高层次的解释性语言:Python对于初学者来说(易于学习)Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。学习Python的目的就是为了能够与计算机进行沟通\交流,在Python的语法中,每个语法存在的意义就是为了让计算机能够像人类一样直白的讲,就是让计算机具备我们人类的某一项技能。
## ### ## 一:注释的语法
1.注释的意思就是对代码的解释说明,注释不会影响程序的运行,只起到提示作用!
注释分为两种: 其中一种叫单行注释
单行注释可以加在你代码的正上方,用来对你代码做解释性的说明,#号与注释文本之间一定要有一个空格。
### ## eg:写代码要遵循代码规范
- 也可以加在你代码同一行的后方,如果单行注释跟在了一行代码的后方,需要先空两个再写,然后#号在空一格,注释对其做解释性的说明。
eg:pc:如果有一行代码我不想让它运行了,可以在代码前面加一个#号:如下图
2.多行注释
可以用三对单引号,也可以是三对双引号,不会影响程序的运行,只起到提示作用
eg:pycharm也提供自动化格式代码的功能:
快捷键:Ctrl+Alt+L
eg:python代码编写规范 >>>: PEP8规范说明书 - 代码注释的原则
不用全部加注释,只需要为自己觉得重要或不好理解的部分加注释即可
注释可以用中文或英语,但不要用拼音
二:变量的定义
1.什么是变量?
变=变化
量=计量,衡量,记录事物的状态,记忆事物的状态,比如说记录人,姓名,年龄,身高体重,记录英雄的等级,记录银行卡里面的余额,记录事物的状态,是会发生变化的: 这就是变量的一种概念。
2.为何要有变量呢?
因为一定是为了让计算机具备人的某一项技能,让计算机拥有人一样记录事物的状态的这种记忆功能。但是会发生变化的,这就叫变量。
- 比如:你玩王者荣耀,刚开始是别人写好的程序,刚开始是一个英雄,自己等级是1,然后去打野升了一级,在人类看来是升了一级,但是站在程序\程序员角度,(英雄升了一级)就是“变量的变化”变量原来等于0,然后变成1,就是参数的变化,程序的运行本质就是一系列状态的变化。
3.如何使用变量
1.变量的定义分成三个部分:
2.比喻:定义变量如下
3.解释器执行到变量定义的代码时会申请内存空间存放变量值,然后将变量值的内存地址绑定给变量名,以变量的定义habby='music'为例:
定义变量申请内存 - music相当于存放到内存空间里面,存到了内存相当于人类的短期记录,'music'\变量值'相当于存到内存里面的一个(房间里面)'hobby'相当于是找到(music\变量值)的门牌号码地址。
- 通过变量名即可引用到值,我们可以结合print()功能将其打印出来
- print(habby)通过变量名habby找到值music,然后执行print(music),输出\打印:music
三:变量名的命名规范
1.变量名只能是,字母,数字或下划线的任意组合
2.变量名的第一个字符不能是数字,下划线建议不要开头因为有特殊含义
3.关键字不能声明为变量名,常用关键字如下:
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from','global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
- 错误示范:
*a=123
$b=456
c$=789
2_name='lili'
123='lili'
and=123
年龄=18 # 强烈建议不要使用中文命名
4.命名风格
1.驼峰体
大驼峰 # 所有单词首字母大写
UserNameFromDb
第一首字母小写其余首字母大写
userNameFromDB
JavaScript推荐使用驼峰体
2.下划线 # 单词与单词之间下划线隔开
user_name_from_db
python推荐使用下划线"""
四:常量
1.变量就是变化的量,常量就是不变的量,主要用于记录一些不变的状态
python语法中没有常量的概念,在python定义不了常量,但是在程序开发过程中会涉及到常量的概念,我们墨守成规的将全大写的变量看成是常量
HOST = '127.0.0.1' # 一般情况下在配置文件中使用较多
在其他编程语言中存在真正意义上常量定义了就无法修改
const pi = 3.14 # 定义常量
pi = 4 # 不支持修改
四:变量三大要素
id:根据 变量值的内存地址,计算出的id号码,它不是内存地址,它是根据内存地址计算出的一串号码,可以把它想象成内存地址的一种映射,从某种程度代表了内存地址
type:事物的状态是分多种多样的 ,而变量值又是用来记录状态的,所以说,对应着,变量值也应该分多种类型,用来记录多种不同的事物状态,类型的状态。
print(name):值本身
五:python底层优化
当值数据量很小的时候 如果有多个变量名需要使用 那么会指向同一块地址
一个变量名只能指向一个内存地址
一个内存地址可以有多个变量名指向
六:垃圾回收机制
- 程序运行的过程中会申请大量的内存空间,而对于一些,无用的内存空间如果不及时清理的话会导致内存使用殆尽(内存溢出),导致程序奔溃,因此管理内存是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来
1.引用计数
如:age=10
变量值10被关联了一个变量名age,称之为引用计数为1
引用计数增加:
age=10 (此时,变量值10的引用计数为1)
m=age (把age的内存地址给了m,此时,m,age都关联了10,所以变量值10的引用计数为2)
引用计数减少:
age=8(名字age先与值10解除关联,再与3建立了关联,变量值10的引用计数为1)
del m(del的意思是解除变量名x与变量值10的关联关系,此时,变量10的引用计数为0)
值18的引用计数一旦变为0,其占用的内存地址就应该被解释器的垃圾回收机制回收
2.标记清除
当内存即将沾满的时候 python会自动暂停程序的执行 从头到尾将内存中数据进行扫描
并打上标记 之后一次性清除掉标记的数据
3.分代回收
基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都遍历一遍,这是非常消耗时间的,于是引入了分代回收来提高回收效率,分代回收采用的是用“空间换时间”的策略
分代:
分代回收的核心思想是:在历经多次扫描的情况下,都没有被回收的变量,gc机制就会认为,该变量是常用变量,gc对其扫描的频率会降低,具体实现原理如下:
回收:
回收依然是使用引用计数作为回收的依据
虽然分代回收可以起到提升效率的效果,但也存在一定的缺点:
例如一个变量刚刚从新生代移入青春代,该变量的绑定关系就解除了,该变量应该被回收,但青春代的扫描频率低于新生代,所以该变量的回收就会被延迟。
python变量垃圾回收机制的入门使用的更多相关文章
- 详解python的垃圾回收机制
python的垃圾回收机制 一.引子 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存空间给回收掉,而变量名是访问到变量值的唯一方式 ...
- 谈一谈python的垃圾回收机制
[python的垃圾回收机制是怎么实现的] 在C语言时代程序员要负责内存的申请和释放,虽然这样的程序可以对资源进行精细的控制.但是它也有它的问题.这就要求程序员 要写许多与业务逻辑无关的内容在代码里面 ...
- python之垃圾回收机制
一.前言 Python 是一门高级语言,使用起来类似于自然语言,开发的时候自然十分方便快捷,原因是Python在背后为我们默默做了很多事情,其中一件就是垃圾回收,来解决内存管理,内存泄漏的问题. 内存 ...
- Python核心技术与实战——二十|Python的垃圾回收机制
今天要讲的是Python的垃圾回收机制 众所周知,我们现在的计算机都是图灵架构.图灵架构的本质,就是一条无限长的纸带,对应着我们的存储器.随着寄存器.异失性存储器(内存)和永久性存储器(硬盘)的出现, ...
- Python的 垃圾回收机制
垃圾回收 1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 257) 这些整 ...
- python的垃圾回收机制和析构函数__del__
析构函数__del__定义:在类里定义,如果不定义,Python 会在后台提供默认析构函数. 析构函数__del__调用: A.使用del 显式的调用析构函数删除对象时:del对象名: class F ...
- 【Python】 垃圾回收机制和gc模块
垃圾回收机制和gc模块 Py的一个大好处,就是灵活的变量声明和动态变量类型.虽然这使得学习py起来非常方便快捷,但是同时也带来了py在性能上的一些不足.其中相关内存比较主要的一点就是py不会对已经销毁 ...
- Python的垃圾回收机制(引用计数+标记清除+分代回收)
一.写在前面: 我们都知道Python一种面向对象的脚本语言,对象是Python中非常重要的一个概念.在Python中数字是对象,字符串是对象,任何事物都是对象,而它们的核心就是一个结构体--PyOb ...
- 周一02.4变量&垃圾回收机制
一.变量 1. 什么是变量 量:记录事物的某种状态,即事物典型的特征 变:事物的状态是可以发生变化的 2. 为何要用变量 是为了让计算机能够像人一样记录事物的状态 3. 如何用变量 (先定义后引用) ...
随机推荐
- 【九度OJ】题目1191:矩阵最大值 解题报告
[九度OJ]题目1191:矩阵最大值 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1191 题目描述: 编写一个程序输入一个mXn的 ...
- 【LeetCode】812. Largest Triangle Area 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 三重循环 组合函数 日期 题目地址:https:// ...
- 【环境搭建】安装pyQt5 在pycharm报This application failed to start because no Qt platform plugin could be initialized的问题
报错:This application failed to start because no Qt platform plugin could be initialized 解决办法: http:// ...
- 「算法笔记」Polya 定理
一.前置概念 接下来的这些定义摘自 置换群 - OI Wiki. 1. 群 若集合 \(s\neq \varnothing\) 和 \(S\) 上的运算 \(\cdot\) 构成的代数结构 \((S, ...
- Unsupervised Domain Adaptation by Backpropagation
目录 概 主要内容 代码 Ganin Y. and Lempitsky V. Unsupervised Domain Adaptation by Backpropagation. ICML 2015. ...
- [opencv]GeneralProcessing_Template_Function
// // Created by leoxae on 2019-05-08. // #ifndef OPENCVDEMO_UTILS_H #define OPENCVDEMO_UTILS_H #inc ...
- CS5211与PS8625参数差异|CS5211完全兼容PS8625|普瑞PS8625替代
PS8625是一个DP显示端口 到LVDS转换器芯片,利用GPU和显示端口(DP) 或嵌入式显示端口(eDP) 输出和接受LVDS输入的显示面板.PS8625实现双通道DP输入,双链路LVDS输出.P ...
- Java初学者作业——声明变量储存商品信息并进行输出
返回本章节 返回作业目录 需求说明: 声明变量存储商品信息(商品名称.商品价格和商品库存数量). 输出商品信息. 实现思路: 打印商品商品信息实现步骤: 声明变量存储商品信息.为变量赋值. 输出变量的 ...
- MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】
全部章节 >>>> 本章目录 4.1 select 选择列表 4.1.1 select 基本结构 4.1.2 选择列表 4.2 MySQL 运算符 4.2.1 MySQL ...
- MongoDB分片设计
#### 如何做好分片集群 * 合理的架构 * 是否需要分片? * 要分多少片? * 数据分布规则? * 正确的姿势 * 选择需要分片的表 * 选择正确的片键 * 使用合适的均衡策略 * 足够的资源 ...