python类型属于对象,不属于变量
这句话怎么理解?那跟着看下去吧
a = 3
a = 'python'
a = 1.23对a赋值了三次,第一次是整数,第二次是字符串,第三次是浮点数,这样的赋值对于习惯了C,C++,JAVA语言的童鞋来说很不习惯,可能他们会认为a居然能从整数变成了字符串,太奇怪了吧。
其实并非如此,在python中,变量名没有类型,类型是属于对象的。所以对上面的例子我们可以这样理解:第一次a指向一个整形对象,第二次a指向一个字符串对象,第三次a指向一个浮点型对象。所以我们实际上并没有改变变量a的类型,只是让它指向了不同类型的对象而已。让我们再一次记住,python中的类型是与对象相关联,而不是变量。
我上一节:
说过,“每一个对象都有两个标准的头部信息:一个类型标识符去标示这个对象的类型,以及一个引用的计数器,用来决定是不是可以回收这个对象” , 那么第一句话里,整数对象3,包含了值3以及一个头部信息,告诉python,这是一个整数对象。
那当执行第二句的时候,有人就会思考,把字符串对象引用给了a,那整数对象3改何去何从呢?
答案是:对象的垃圾收集
在python中,每当一个变量名被赋予一个新的对象后,之前的那个对象占用的空间就会被收回,当然是在它没有被其他变量引用的情况下。而这种回收对象空间的技术就叫做垃圾收集。这种机制会使废弃的对象空间自动放入自由内存空间池,等待后来的对象使用 然后python是怎么保证整数对象3没有被其他变量引用呢? 在内部,python是通过每一个对象中的计数器来记录引用直到这个对象上的次数来完成这一功能的。一旦这个计数器被设置为零,这个对象的内存空间将自动被回收。 垃圾收集最直接的,可感受得到的好处就是可以在脚本中任意使用对象而不需要顾虑空间的释放。