python的变量与赋值详细分析


Posted in Python onNovember 08, 2017

python的变量与赋值

1.变量的命名规则

变量其实通过一个标记调用内存中的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错。下面总结了一下变量的命名规则:

1.不能使用python的关键字,也就是说标记不能被提前占用,python的关键字包括:
['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']
2.变量名的第一个字符不能是数字,这样的命名被认为是不合法的。
3.变量名只能是字母、数字或下划线(_)的任意组合。

规则就是规则,没有什么好解释的,但是我们可以在符合规则的前提下做进一步的要求,详情请参照python的pep8编码规范 

2.变量的赋值

在python中,我们对变量进行赋值的时候,用的是一个等于符号(=),要注意不是两个(==)。

例如:

a = 10

这段代码的动作就相当于:

python的变量与赋值详细分析

注意:我们并不是为标记a建立了一个值,而是先建立一个值以后,再用一个标记去指向它。

在知道了赋值是怎么进行的以后,我们再来看下面这个代码:

a = 10
b = a
a = 20

那么,此时b=?
如果按照我们常用的数学思维的话,那么b肯定是等于20的,但这里却不是这样的,如果按照一般的思维的话,是下面这样的:

python的变量与赋值详细分析

如果按照这个逻辑的话,那么b肯定是等于20的,但这里是错误的,所以我画了个叉。

因为变量是一个标记,用来调用内存中的值,当我们将一个标记赋值给另一个标记的时候,应该是让其指向另一个标记的内存,而不是指向标记。

按照这个原则,我们的思路应该是这样的:

python的变量与赋值详细分析

也就是说此时b应该等于10,下面我们来试验一下是否正确:

python的变量与赋值详细分析

验证正确,这个思路没有问题。

3.python中的垃圾回收机制

这个时候我们可能会有疑问,如果是下面这种情况会怎么样:

a = 10
a = 20

按照我们之前建立的思维,a已经指向了20了,那么剩下的那个10会怎么样?

这就要说起python中的垃圾回收机制了,python会按一定的规则回收内存中的垃圾数据以释放内存空间。

Python内存回收的基石是引用计数,“当一个对象的引用被创建或复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1”,如果对象的引用计数减少为0,将对象的所占用的内存释放。

python通过引用计数,将引用次数为0的数据从内存中清除,具体的回收时机不太清楚,可能是每隔一段时间回收一次。

简单的垃圾回收这这样的,但垃圾回收的机制远比这要复杂许多,因为有时候会出现循环引用的情况,这种时候,单纯清除0次引用的还是不够的,所以此时还有其他的算法来回收。

总结

以上就是本文关于python的变量与赋值详细分析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:python好玩的项目—色情图片识别代码分享、Python实现一个简单的验证码程序、Python算法输出1-9数组形成的结果为100的所有运算式等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

Python 相关文章推荐
详解Python中的文本处理
Apr 11 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
python实现猜数字游戏
Mar 25 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
Python爬虫爬取博客实现可视化过程解析
Jun 29 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
python单元测试框架pytest的使用示例
Oct 07 Python
浅谈python迭代器
Nov 08 #Python
python生成excel的实例代码
Nov 08 #Python
Python 多核并行计算的示例代码
Nov 07 #Python
python判断字符串是否是json格式方法分享
Nov 07 #Python
python好玩的项目—色情图片识别代码分享
Nov 07 #Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 #Python
python中numpy.zeros(np.zeros)的使用方法
Nov 07 #Python
You might like
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
php存储过程调用实例代码
2013/02/03 PHP
基于header的一些常用指令详解
2013/06/06 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
php获取微信openid方法总结
2019/10/10 PHP
url地址自动加#号问题说明
2010/08/21 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Numpy之reshape()使用详解
2019/12/26 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
竞聘副主任科员演讲稿
2014/01/11 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
立志成才演讲稿
2014/09/04 职场文书
求职导师推荐信范文
2015/03/27 职场文书
2015迎新晚会开场白
2015/05/29 职场文书