python中一切皆对象,我觉得这里的对象和面向对象编程中的对象应该是不一样的。python中变量1,'a',函数,类,模块都是对象,在使用type()函数的时候,对于上面的几个对象都会返回一个结构相似的内容<type '类型'>,其中a为定义的函数,b为定义的类。
>>> print type(a) <type 'function'> >>> print type(b) <type 'classobj'> >>> print type(1) <type 'int'>
python是动态类型语言,即应用与对象分离的(定义变量时不要声明它的类型,而是在赋值的时候将变量的应用给变量名)。这里的应用是指内存地址,和指针有点类似。我们用名字表示应用,变量名、函数名、类名等,使用id()函数可以查看名字所对应的地址值。对象则就是上面说的变量(1,'a',True),函数,类等。
python中一切皆对象,则内存中python应该是使用相同的方法管理各种对象的。应用是用来使用对象的,赋值语句可以看做对象与应用的链接。
#变量,这里只有一个对象1,a/b/c都是对象1的应用 a=1 b=1 c=a #新的对象2,此时a不再是1的应用,而是2的应用 a=2 #函数,f,f2为下面同一个函数的应用 def f(): print "abc" f2=f #此时f变成了'a'对象的应用,不再是上面函数的应用 f='a'
python对象在内存中,都维护着一个应用计数,新增应用时加,删除应用时减。计数为0时,就有可能清除该对象所占的内存。清除与否是与对象的内容和python中的gc设置有关的。gc是python关于垃圾回收相关的一个库。