20 November 2013
  1. 变量不用声明。
  2. 变量在第一次赋值时创建。可以引用任何对象,且必须在引用之前赋值。
  3. 变量与对象时不同的概念:
    • 变量时系统表的元素,拥有指向对象的连接空间;
    • 对象是分配的一块内存,保存它们所代表的值;
    • 引用时自动形成的从变量到对象的引用。
  4. 变量本身没有与任何类型信息或约束关联。类型的概念仅存在于对象中。
  5. 对象的两个标准头部信息:
    • 类型标识符,标示每一个对象的类型;
    • 引用计数器,用于垃圾回收。
  6. 多个变量可以共享一个对象,即多个变量对应一个对象。但是当其中一个被赋值后系统将创建一个新的对象,即Copy on Write。
  7. 对于可以原处修改对象(如list、dict),所有共享引用的变量任何一个对变量的原地修改都将影响到其他变量。如果要避免此现象需要直接拷贝对象。分片方法或者X.copy()方法。
  8. 判断变量共享引用与相等:
    • X == Y,判断二者是否相等
    • X is Y,判断二者是否共享引用,即指向同一个对象。如果时共享引用的那么肯定也是相等的。
    • sys.getrefcount(X),返回对象的引用次数。


blog comments powered by Disqus