文章插图
300 和 400 两个整数对象各有一个标签 。
最后,我们再执行一条语句:
>>> n='foo'
这会导致 Python 创建一个新的字符串对象,其值为 foo,并将名字 n 指向这个字符串对象 。
文章插图
因为变量是一个名字、一个标签,它可以被轻易地从一个对象贴往另一个对象,不管这些对象是否属于同一类型 。
你也能够看到,n 指向字符串对象后,不再有任何名字指向整数 300 这个对象,我们无法再对其进行访问,它变成一个“孤儿”了!
这里简单介绍一下 Python 对象的生命周期 。
一个对象的生命周期始于它被初始创建时,那时至少有一个引用指向它 。在后续的过程中,会有其他引用指向或不再指向它,也就是说,指向一个对象的引用数目是动态变化的 。但只要还有一个引用指向它,这个对象就保持存活状态 。
当对象的引用数减少到 0 时,这个对象就变为不可访问状态了 。这也意味着其生命周期即将结束 。Python 解释器会留意到这个对象不可访问,将其占用的内存重新标记为可用 。
这个过程在计算机领域称为:垃圾回收 。
【对象身份(id)】
Python 为每一个创建的对象分配一个数字,这个数字可唯一地标识这个对象 。Python 解释器确保不会有任何两个对象在其生命周期内拥有相同的标识 。一旦对象的引用计数减至 0,伴随着对象被回收,它的标识数字也会被回收,并可重用 。
Python 内置的 id() 函数可返回一个对象的标识 。我们可用这个函数来判断两个变量是否指向了同一个对象 。
>>> n=300>>> m=n>>> id(n)1455946814064>>> id(m)1455946814064>>>>>> m=400>>> id(m)1455946814256
这也验证了我们上边对“变量是对象的引用”的分析 。
有了这些概念后,下边这段代码执行结果很容易理解:
>>> m=300>>> n=300>>> id(m)1455943043248>>> id(n)1455946814256
m 和 n 指向了不同的整数对象 。
但是,下边这段代码执行结果该如何解释?
>>> m=30>>> n=30>>> id(m)140723401618608>>> id(n)140723401618608
m 和 n 的值都是30,它们的 id 竟然也是相同的!
原来,出于优化目的,Python 解释器在启动时自动创建了一批数值介于 [-5, 256] 之间的“小整数”对象,这些对象会在程序运行过程中被重用 。此称为“小整数缓存” 。
所以,当你给变量赋值 [-5, 256] 之间的整数时,具有相同值的变量实际上会指向同一个对象 。
【变量命名】
在我们使用过的例子里,我们用到的变量名都是诸如 m、n 这样简短的名字 。而变量的名字其实是可以很长并且具有明确意义的 。合理的命名变量会让人一眼就明白其含义,有助于代码的理解和维护 。
Python 支持任意长度的变量名,并且变量名可以包含大小写字母(A-Z、a-z)、数字(0-9)和下划线(_) 。一个限制是:变量名首字符不得是数字 。
以下是一些合法的变量名:
>>> name='Bob'>>> Age=54>>> has_W2=True>>> print(name, Age, has_W2)Bob 54 True
而以数字开头的变量名则会引起语法错误:
>>> 1099_filed = FalseFile "", line 11099_filed = False^SyntaxError: invalid token
另外,变量名也是大小写敏感的,大写和小写被视作不同的字符 。
以下几个变量应视为不同的变量:
>>> age=1>>> Age=2>>> aGe=3>>> AGE=4>>> a_g_e=5>>> _age=6>>> age_=7>>> _AGE_=8
如果你在同一程序中同时使用了这几个形式不同的 age 给变量命名,这是不被提倡的 。这会引起混淆,在不同地方遇到 age 时需要绞尽脑汁来思考它的确切含义,也会给代码维护者带来很大麻烦 。
变量名称应是自描述的,能清晰地表明变量是用来做什么的 。
假如你有一个表示毕业生数目的变量,那么你可以使用下边这几个变量名:
>>> numberofcollegegraduates = 2500>>> NUMBEROFCOLLEGEGRADUATES = 2500>>> numberOfCollegeGraduates = 2500>>> NumberOfCollegeGraduates = 2500>>> number_of_college_graduates = 2500
这些名称明显好于 m、n,你可以从中读出它们表示的是什么 。
- 一文了解删除微信好友的两种方法 用什么方法删除微信好友
- 一文看懂2022苹果春季新品发布会 苹果2021秋季发布会
- 【游戏世界】明日方舟新六星奶妈特色和技能理解起来比较简单和轻松
- 止于至善”怎么理解 止于至善是什么意思
- 【游戏世界】《游戏王:决斗链接》沉默混沌全新顶级理解
- 【游戏世界】特战荣耀最后一战竟在开篇, 只是当时未曾理解, 回头再看心中感慨
- 一文读懂OPPO手机隐私保护功能 OPPO隐私保护
- 理解是女人送给男人最好的礼物 女人送男人什么礼物最好
- 美发色彩的调配理解 美发颜色调配
- 【游戏世界】王者荣耀: 为什么说甄姬是低端局T0英雄, 却有大量玩家不理解呢?