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

 更新时间:2024年09月12日 14:14:09   作者:小鹿先生~  
本文介绍了变量的定义、赋值、使用原则、命名规范、内存管理以及变量的特征,变量是程序中可变化的量,需要先定义后使用,可多次更改值,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

总结

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

相关文章

  • python 字典item与iteritems的区别详解

    python 字典item与iteritems的区别详解

    这篇文章主要介绍了python 字典item与iteritems的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python统计某列不同值的个数的示例代码

    Python统计某列不同值的个数的示例代码

    在数据分析和数据处理中,统计数据往往集中在特定列中不同值的出现次数,本文主要介绍了Python统计某列不同值的个数的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 浅谈Python NLP入门教程

    浅谈Python NLP入门教程

    本篇文章主要介绍了Python NLP入门教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 基于python图书馆管理系统设计实例详解

    基于python图书馆管理系统设计实例详解

    这篇文章主要介绍了基于python图书馆管理系统设计实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python Web开发你要理解的WSGI & uwsgi详解

    python Web开发你要理解的WSGI & uwsgi详解

    这篇文章主要给大家介绍了关于python Web开发你一定要理解的WSGI & uwsgi的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • python实现多线程端口扫描

    python实现多线程端口扫描

    这篇文章主要为大家详细介绍了python实现多线程端口扫描,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 使用Python测试Ping主机IP和某端口是否开放的实例

    使用Python测试Ping主机IP和某端口是否开放的实例

    今天小编就为大家分享一篇使用Python测试Ping主机IP和某端口是否开放的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • flask route对协议作用及设计思路

    flask route对协议作用及设计思路

    这篇文章主要为大家介绍了flask route对协议作用及设计思路详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 浅谈Python实现opencv之图片色素的数值运算和逻辑运算

    浅谈Python实现opencv之图片色素的数值运算和逻辑运算

    今天带大家来学习的是关于Python的相关知识,文章围绕着图片色素的数值运算和逻辑运算展开,文中有非常详细的的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 利用Python实现手机短信监控通知的方法

    利用Python实现手机短信监控通知的方法

    今天小编就为大家分享一篇利用Python实现手机短信监控通知的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论