python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python变量与内存管理

python基础之变量与内存管理方式

作者:小鹿先生~

本文介绍了变量的定义、赋值、使用原则、命名规范、内存管理以及变量的特征,变量是程序中可变化的量,需要先定义后使用,可多次更改值,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=test

NameError: 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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文