python之name binding

1. 名字

  名字是对一个对象的称呼,一个对象可以只有一个名字,也可以没有名字或取多个名字。但对象自己却不知道有多少名字,叫什么,只有名字本身知道它所指向的是个什么对象。给对象取一个名字的操作叫作命名,python将赋值语句认为是一个命名操作(或者称为名字绑定)。

名字在一定的名字空间内有效,而且唯一,不可能在同一个名字空间内有两个或更多的对象取同一名字。

让我们再来看看本篇的第一个例子:i = 1。在python中,它有如下两个含义:
 * 创建一个值为1的整型对象
 * "i"是指向该整型对象的名字(而且它是一个引用)
 
2. 绑定
  如上所讲的,绑定就是将一个对象与一个名字联系起来。更确切地讲,就是增加该对象的引用计数。众所周知,C++中一大问题就是内存泄漏 -- 即动态分配的内存没有能够回收,而解决这一问题的利器之一就是引用计数。python就采用了这一技术实现其垃圾回收机制。

python中的所有对象都有引用计数。

i=i+1

* 这创建了一个新的对象,其值为i+1。
* "i"这个名字指向了该新建的对象,该对象的引用计数加一,而"i"以前所指向的老对象的
  引用计数减一。
* "i"所指向的老对象的值并没有改变。
* 这就是为什么在python中没有++、--这样的单目运算符的一个原因。

python之name binding的更多相关文章

  1. uvloop —— 超级快的 Python 异步网络框架

    简短介绍 asyncio是遵循Python标准库的一个异步 I/O框架.在这篇文章里,我将介绍 uvloop: 可以完整替代asyncio事件循环.uvloop是用Cython写的,基于 libuv. ...

  2. Python闭包相关问题

    闭包的概念一直是似懂非懂,看过了原理,却不知道怎么实际应用. 刚好看到Python的late binding问题,记录如下,以备后续增补. >>> def create_multip ...

  3. 2015/9/21 Python基础(17):绑定和方法调用

    绑定和方法调用现在我们需要再次阐述Python中绑定(binding)的概念,它主要与方法调用相关联.方法是类内部定义的函数,这意味着方法是类属性而不是实例属性.其次,方法只有在其所属的类拥有实例时, ...

  4. 所有的GUI Toolkit,类型之多真开眼界

    The GUI Toolkit, Framework Page User interfaces occupy an important part of software development. Th ...

  5. C++ 100款开源界面库 (10)

    (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的 ...

  6. what is yaml ?

    what is yaml  ? when I fist time meeting it  is in java projects she as a system config file to my e ...

  7. 仿迅雷播放器教程 -- C++ 100款开源界面库 (10)

      (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系 ...

  8. LIST OF NOSQL DATABASES [currently 150]

    http://nosql-database.org Core NoSQL Systems: [Mostly originated out of a Web 2.0 need] Wide Column ...

  9. 小而美的ghost driver

    做过selenium自动化项目的同学应该都遇到过这样的问题:测试用例太多,运行速度过慢导致团队成员怨声载道. 于是便有了selenium grid和多线程运行selenium测试用例的方法.这些方法各 ...

随机推荐

  1. Use appropriate component from RM component palette

    --------------------------- 错误 --------------------------- Opened report contains the following non- ...

  2. ISE创建Microblaze软核(三)

    第七步 进入SDK开发环境 编译完成后弹出如下对话框,选择SDK的工作目录.在MicroblazeTutor中创建一个Workspace文件夹,并选择该文件夹为SDK的工作目录. 进入SDK主界面. ...

  3. centos 搭建 docker sentry

    1.安装 http://blog.51cto.com/linuxg/2052927 2 .实际调试: 项目: <title>hghh</title> <script sr ...

  4. MySQL 主从复制与读写分离

    1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...

  5. 纯php实现中秋博饼游戏(1):绘制骰子图案

    最近公司中秋博饼(在厦门),自己没事也想玩玩,所以就想动手写了一个纯php实现的中秋博饼游戏,既然要纯php实现,就要用php来生成图案,所以第一步就先绘制骰子图案. 平时很少使用php绘图,不过查查 ...

  6. zipkin对于dubbo的支持

    对于Web端: 1. 需要在applicationContext的头部添加中添加prefix引用: xmlns:dubbo="http://code.alibabatech.com/sche ...

  7. inline修饰虚函数的问题

    虚函数是否可以内联? 一般来说,inline是编译时的行为,虚函数是在程序执行时的行为,因此编译器一般会拒绝对虚函数进行内联!

  8. PYTHON 常用API ***

    1.类型判断 data = b'' data = bytes() print (type(data)) #<class 'bytes'> isinstance(123,int) if ty ...

  9. An Introduction to Greta

    I was surprised by greta. I had assumed that the tensorflow and reticulate packages would eventually ...

  10. java 面向对象 — 类和对象

    构造方法 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回值 5.构造器 ...