«

»

Python中动态变量的理解

python 有时候一本除去华丽的排版和夸张的辞藻,踏踏实实讲基础或原理的书,可能对学习更有用。《Python学习手册 第3版》就是本挺好的书。Python语言跟许多脚本语言一样,变量不需事先声明和类型化。那么在内部是如何实现的呢? 若定义a=3,则先创建一个值为3的对象,注意此对象中同时保存有3的类型:整型。若发现a的变量名没有定义,则创建一个名为a的变量,而这个名为a的变量则类似于一个指针,指向对象“3”的内存空间。

这就是说a本身并无类型,类型是由a所指向的对象决定的。 若a=3,然后又a=’dd’,则在定义a=’dd’时,会再次创建一个’dd’的对象,并将a指向该对象。而先前的对象3会发生什么情况呢?这里与之前关注过的python的引用计数会发生奇妙的联系。在对象中,保持有一个引用计数器,当a=’dd’时,原对象3的引用计数会减1,在没有其它变量引用此对象3的情况下,3的引用计数减为0,则系统自动释放对象3所占用的空间。这是Python所用的垃圾收集机制。

那么如下的例子:

则会形成a和b同时指向对象3的情形,则此时3对象的引用计数应为2,这样,若再执行:

则会新创建对象4,注意在Python中,整数对象实际上是不可变的。这一点与其它语言有相当大的差别。 a指向对象4,而原来的3对象引用计数减1但并不为0,因此变量b指向对象3仍然有效。所以虽然Python的变量是引用值,但却不会造成a值修改而b值跟着改变的情况。

1 星2 星3 星4 星5 星 (尚无评分)
Loading...Loading...

相关文章

Python获取当前版本的函数 Python2.x和3.x的区别之大,几乎可以作为一个变种语言存在。在实际开发中,Python的版本选择是很让人纠...
获取虚拟空间的系统版本和Python版本 vps虽好,但配置相对较低,成本相对较高。对于一个无限流量,无限空间的虚拟主机,其实可以更充分的利用...
php和python求阶乘 Python和php比较,php更象一种专用Web开发语言。而Python的应用面更广泛一些,更偏向于一种通用语言。虽...
Python的三元条件表达式与列表解析表达式 Python作为一种非典型语言,天生就带有一些高级数据结构,如列表、元组、字典、集合、队列等,无需进一...
查找统计Python列表中的重复元素 有一个xml配置文件,里面配置了许多关键词,由于许多人维护这个配置文件,导致关键词有可能重复,引发一...
用Python的正则去除xml文件中的注释 手头有一个xml配置文件,里面加了许多大块的注释,严重影响阅读。现在考虑一下,如何用Python中的正则表...
Python 中日期类型的运算 Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime。time模块提供 的接口与C标准...
一个按文件名中的日期清分日志的Python小程序 维护的某中间业务平台按报文存储日志,每个报文都会产生一个日志文件,现在大约每天数千笔交易,导致在l...

发表评论

电子邮件地址不会被公开。