在python中,一切变量都是对象的引用
举个例子:
a=3
内部执行过程如下图:
如图所示,python内部分为3个步骤完成a=3的赋值操作:
- 创建变量a
- 创建一个对象(分配一块内存)存储值3
- 将变量与对象通过指针连接起来
基于此内部机制,故python在定义变量的时候无需先声明变量的类型,变量类型是在运行过程中根据对象类型自动决定的,在过程中可以改变变量的类型即使变量引用不同类型的对象即可
例如:
a=3 #整型
a='sean' #字符串型
a=3.14 #浮点型
在此例中变量a分别引用整型对象3、字符串型对象sean、浮点型对象3.14
由此可总结出,变量没有类型,类型是属于对象的
既然对象有类型,那么对象又是如何保存类型的呢?下面说明一下对象的详细结构。
对象结构如下图:
如图所示,对象结构分为三个部分,存值区,类型标志符和计数器。类型标志符(严格意义上它是一个指向int对象的指针)标记了这个对象的类型。
值得注意的是计数器部分,计数器数值记录了引用该对象的变量数,当计数器值为0时,即没有变量引用时,该对象被回收释放内存空间。