python中空间的位置怎么放置_python中对象初始化放在内存中什么位置

ebf8e4dd4b9ad0f838767b84c2d234cb.png

截屏自《Python源码剖析》正文第一页。

也即:

944bfcd08a82dab0a2ddf889747bfaad.png

当在其他class中使用

013c612f5209b6fdc7370a397462fe44.png

时,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值,所以在函数之外也能够进行访问。

新手理解,有错请指正,非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值