1. 苏葳的备忘录首页
  2. 编程

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=3
b=a

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

a=3+1

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

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/423.html

发表评论

邮箱地址不会被公开。 必填项已用*标注