CPython中如何实现变量赋值



我知道Python中的变量实际上只是对一些底层对象的引用/指针。由于它们是指针,我猜它们以某种方式"存储"或以其他方式与它们所引用的对象的地址相关联

这样的"地址存储"可能发生在CPython实现的低级别。但是我对C的了解不足以从源代码中推断出这一点,也不知道从源代码的哪里开始查找。

所以,我的问题是:

在CPython的实现中,对象地址是如何存储在指向它们的变量中或以其他方式与之关联的?

在模块作用域或类作用域中,变量被实现为Python dict中的条目。指向对象的指针存储在dict中。在旧的CPython版本中,指针直接存储在dict的底层哈希表中,但自CPython 3.6以来,哈希表现在将索引存储到dict条目的密集数组中,指针就在该数组中。(还有一些分键dict的工作方式有点不同。它们用于优化对象属性,您可能会也可能不会将其视为变量。(

在函数范围中,Python创建一个堆栈帧对象来存储给定函数执行的数据,堆栈帧对象包括指向变量值的指针数组。变量被实现为该数组中的条目,指向值的指针存储在数组中,每个变量都有一个固定的索引。(字节码编译器负责确定这些索引。(

最新更新