首页 > 代码库 > 你相信吗??Python把数字也当做对象!@@@对象,名称绑定,引用计数
你相信吗??Python把数字也当做对象!@@@对象,名称绑定,引用计数
本文学习自:http://blog.csdn.net/yockie/article/details/8474408
1.对象
Python中, 万物皆对象,包括12345等int常量。不信吗??用dir()命令看一看就知道
当然了,既然他们都叫做对象。那么肯定有共同点了!所有的对象都有下面的三个特征
* 都有唯一的标识码 id()
* 都有确定的类型
* 有内容(或称为值)
一旦对象被创建,标识码就不能更改,对象类型也是不可更改的,内容可以改变(可变对象如dict、list 。恒定对象如int、string)
而一个对象有可能:
* 有0个或者n个方法
* 有0个或者n个名字(引用计数为0,或者为n)
2.名字
我悄悄的认为,名字就是引用。一个对象可以没有或者有多个名字,对象自己不知道有多少名字,叫什么,只有名字本身知道它所指向的是个什么对象。Python将赋值语句认为是一个命名操作(或名称绑定)
一个对象的引用计数可以为0或者为n,要访问对象必须通过名字(引用),Python中赋值操作就是一个命名操作(或名字绑定)。
名字在一定的名字空间内有效。而且唯一,就是说一个名字只能对应一个对象,而一个对象却可以有多个名字。
a = 1 在Python中的含义:
* 创建一个值为1的对象
* a是指向该对象的名字
3.绑定
绑定就是用引用指向对象,会增加该对象的引用计数。
a = a + 1 在Python中的含义:
* 创建一个新的对象,值为 a + 1
* a 这个名字指向新对象,新对象的引用计数 + 1 ,而a以前指向的对象引用计数 - 1
* a以前指向的对象值没有变
什么操作导致引用计数的变化?
* 赋值
* 在一个容器(list、 dict、seq)中包含该对象
——将增加对象的引用计数
* 离开当前的名字空间(该名字空间中的本地名字都会被销毁)
* 对象的一个名字被绑定到另外一个对象
* 对象被从包含它的容器中删除
* 用del()方法
——将减少对象的引用计数
你相信吗??Python把数字也当做对象!@@@对象,名称绑定,引用计数