截屏自《Python源码剖析》正文第一页。
也即:
当在其他class中使用
时,node是在堆中的。相当于在C中调用malloc。
不仅仅是对于像Node这样的class 的对象是存在于堆中的,在Python中就连int类型的数值同样是存在在堆中的。因为在Python中就连基本数据类型同样是对象。
让我们思考下Node中的value和self.value这两个变量:
为什么在Node中其他的方法能够调用self.value而不能够调用value?
以前我使用C/C++的思维方法来理解这个问题,现在看来貌似是错的:以前以为value是函数(方法)中的动态变量,放在栈内存中的,当函数(方法)结束之后自然而然就会释放掉动态变量的值。而根据上面的理解,value同样是放在堆中的话,如果理解成value在函数结束之后会被python的core自动回收掉可能就能够解释的通了。
而对于self.value为什么能够用则容易理解一些:self指向的是Node初始化是开辟的堆内存,在这块内存(属于初始化的实例)中有value的空间来保存属于这个实例的value值,所以在函数之外也能够进行访问。
新手理解,有错请指正,非常感谢!