[python之name binding]
1. 名字
名字是对一个对象的称呼,一个对象可以只有一个名字,也可以没有名字或取多个名字。但对象自己却不知道有多少名字,叫什么,只有名字本身知道它所指向的是个什么对象。给对象取一个名字的操作叫作命名,python将赋值语句认为是一个命名操作(或者称为名字绑定)。
名字在一定的名字空间内有效,而且唯一,不可能在同一个名字空间内有两个或更多的对象取同一名字。
让我们再来看看本篇的第一个例子:i = 1。在python中,它有如下两个含义:
* 创建一个值为1的整型对象
* "i"是指向该整型对象的名字(而且它是一个引用)
2. 绑定
如上所讲的,绑定就是将一个对象与一个名字联系起来。更确切地讲,就是增加该对象的引用计数。众所周知,C++中一大问题就是内存泄漏 -- 即动态分配的内存没有能够回收,而解决这一问题的利器之一就是引用计数。python就采用了这一技术实现其垃圾回收机制。
python中的所有对象都有引用计数。
i=i+1
* 这创建了一个新的对象,其值为i+1。
* "i"这个名字指向了该新建的对象,该对象的引用计数加一,而"i"以前所指向的老对象的
引用计数减一。
* "i"所指向的老对象的值并没有改变。
* 这就是为什么在python中没有++、--这样的单目运算符的一个原因。