[Python 学习笔记] 4: 对象驻留

  我们知道 C# 中使用串驻留( erning)机制来提高系统性能可在 Python 中非但串有驻留机制连整数等也拥有同样待遇

>>> i = 1
>>> i2 = 1
>>> id(i)
11228592
>>> id(i2)
11228592


  甚至是类成员也同样如此

>>>  Class1:
  def __init__(self):
    self.x = 123
    
>>> a = Class1
>>> b = Class1
>>> id(a.x)
11229112
>>> id(b.x)
11229112


  继续个复杂

>>>  Class1:
  i = 123
  def __init__(self):
    self.x = 1234
    
>>>  Class2:
  i = 123
  def __init__(self):
    self.x = 1234
    
>>> id(Class1.i)
11229112
>>> id(Class2.i)
11229112
>>> id(Class1.x)
12302192
>>> id(Class2.x)
12302216


  即便在区别类型中也只有例子成员地址区别

  我们还可以使用如下方式查看引用计数变化这是否意味着 Python 将简单类型也分配到堆上?

>>> import sys
>>> a = 1
>>> sys.getrefcount(a)
530
>>> b = a
>>> sys.getrefcount(a)
531
>>> c = 1
>>> sys.getrefcount(a)
532


  而在 C# 中显然堆或栈上都不可能如此

unsafe
{
   i = 1;
   i2 = 1;
  * p1 = &i;
  * p2 = &i2;
  Console.WriteLine(()p1);
  Console.WriteLine(()p2);
}


  输出结果自然区别

Tags: 

延伸阅读

最新评论

发表评论