>>> 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);
}
输出结果自然区别
最新评论