python基础之变量与内存管理方式
作者:小鹿先生~
一、变量的定义
变量指的就是随时可变化的量,量通常可以指实物的状态(比如:大树的高度、人的年龄等)。
变量的组成通常为:变量名、变量值组成。变量名需要保持唯一性,通过变量名即可以找到对应数据。
变量允许被多次更改,在程序运行过程中,实际就是一系列变量值的变化。
二、变量的赋值
将数据放入变量的过程叫做赋值,赋值符号为:“=”。
变量的定义方式为:name=value。在强类型的编程语言中,定义变量时要指明变量的类型,python是弱类型语言,不需要事先声明变量类型
弱类型语言有两个特点:
- 变量无须声明就可以直接赋值对一个不存在的变量赋值就相当于定义了一个新变量。
- 变量的数据类型可以随时改变比如,同一个变量可以先被赋值为整数,再次被赋值为字符串。
test = 123 test = 12.30 test = "test"
三、变量的使用原则
使用原则:先定义,后引用
如果未定义时直接引用,会报错,比如:未定义变量a,直接打印变量值,则会直接提示NameError: name xxx is not defined
In [1]: a=test
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-de92534033e7> in <module>()
----> 1 a=testNameError: name 'test' is not defined
In [2]: print(a)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-bca0e2660b9f> in <module>()
----> 1 print(a)NameError: name 'a' is not defined
四、变量命名规范
原则1:变量命名时尽量做到见名知意
如果变量名没有意义,在代码量大时,自己或别人无法直观的清楚这个变量的含义。
原则2:变量名的由字母数字下划线组成
在字母中,纯大写一般标识常量,所以一般用小写标识变量,另外不要用拼音、汉字作为变量,虽然可以使代码运行,但是很不专业
原则3:变量名不能由数字开头
原则4:变量名不能使用python内置关键词
如:break、print、if……,当使用内置关键词做变量时,你的变量会覆盖原有功能,使之不能使用
五、变量的内存管理
变量在进行赋值时,就是在内存开辟一个空间,把内存空间的地址捆绑给了变量名,我们通过变量名就可以找到这个对应值。定义变量会占用内存空间,对于计算机而言,内存的总量是有限的,而且内存也不是只服务于这一个程序,还有很多程序也需要使用,所以,当定义的变量不使用后需要把对应的内存空间给释放出去。否则申请了内存空间又不使用,就是在浪费内存空间。当未被释放的内存太多,把可用内存全部装满后,就会导致内存溢出。
在我们写代码时,定义的变量在不使用后,进行内存空间释放。这个过程就叫做内存管理。但是内存管理是一件非常繁琐的事情,如果处理不恰当,就会导致程序崩溃。python推出了一个内存管理机制,称为垃圾回收机制(Garbage Collction,简称GC)。
当内存中的变量值地址没有绑定任何变量名时,无法通过变量名找到这个内存地址时,这个内存地址占用就是垃圾。垃圾回收机制就是用来释放这些没有任何绑定关系的内存地址。而这其中会涉及一个概念引用计数,也就是内存地址绑定的数量,如下:
a = 100 b = a c = a #定义变量a时,此时对应的内存地址引用计数为1,b也绑定的是同一个内存地址,此时引用计数为2,同理绑定c后引用计数变为3。 # -------------------- del a #引用计数为2 del b #引用计数为1 c = 101 #当重新绑定变量c的内存地址后,因为后运行,所以变量值100对应的内存地址,引用计数变为0 #当abc的绑定关系都解除后,此时引用计数变为0,无法通过任何变量找到“test”这个内存地址。此时“test”就被称为垃圾。
python解释器默认的垃圾回收机制,在一直扫描内存里面有没有引用计数为0的,一旦发现存在,就会立即把这个内存空间给回收掉。不需要我们进行手动处理。
六、变量的特征
变量有两个重要的特征,分别是id和type。
id反应的就是根据变量值的内存地址所计算出来的一个id号码,注意:id不是内存地址,是通过内存地址计算出来的一个值,具有唯一性可以理解为内存的映射。
type查看的是变量的类型,因为事物的状态是多样的,而变量是存储事物的状态,比如:数字、字符串
In [3]: a=123 In [4]: b="str" In [5]: id(a) Out[5]: 9082880 In [6]: id(b) Out[6]: 139983741909344 In [7]: type(a) Out[7]: int In [8]: type(b) Out[8]: str
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。