python的变量与赋值详细分析

作者:ZHANGONE 时间:2022-06-14 23:09:44 

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次引用的还是不够的,所以此时还有其他的算法来回收。

来源:http://www.cnblogs.com/zhange/p/7800722.html

标签:python,变量赋值
0
投稿

猜你喜欢

  • Access数据库用另一种方式管理密码

    2008-10-13 12:25:00
  • Python 实现将某一列设置为str类型

    2022-07-27 03:20:12
  • pytorch+sklearn实现数据加载的流程

    2022-05-15 14:44:27
  • MySql使用mysqldump 导入与导出方法总结

    2024-01-23 13:26:32
  • Go语言使用Etcd实现分布式锁

    2024-04-23 09:37:33
  • mysql导入导出命令

    2011-07-04 11:28:50
  • Python用selenium实现自动登录和下单的项目实战

    2021-02-04 18:29:44
  • Python PyMySQL操作MySQL数据库的方法详解

    2024-01-21 17:44:24
  • 基于python list对象中嵌套元组使用sort时的排序方法

    2022-11-04 03:38:21
  • JavaScript通过改变文字透明度实现的文字闪烁效果实例

    2024-04-16 09:13:28
  • Python基于property实现类的特性操作示例

    2022-08-07 11:02:08
  • Python实现GUI计算器(附源码)

    2022-06-07 03:32:47
  • SQLServer 全文检索(full-text)语法

    2011-12-01 10:38:22
  • mysql分表和分区的区别浅析

    2024-01-23 13:43:16
  • Python给定一个句子倒序输出单词以及字母的方法

    2022-11-21 00:36:50
  • pycharm无法安装cv2模块问题及解决方案

    2023-02-14 21:20:49
  • python使用folium库绘制地图点击框

    2023-03-08 00:50:04
  • mysql学习笔记之基础知识

    2024-01-13 08:27:16
  • ASP.NET(C#)中操作SQLite数据库实例

    2024-01-20 08:30:12
  • JS 按钮点击触发(兼容IE、火狐)

    2024-04-19 10:47:39
  • asp之家 网络编程 m.aspxhome.com