如何在CPython中实现变量赋值?

如何在CPython中实现变量赋值?,python,c,python-3.x,cpython,python-internals,Python,C,Python 3.x,Cpython,Python Internals,我知道Python中的变量实际上只是一些底层对象的引用/指针。由于它们是指针,我猜它们以某种方式存储或与它们引用的对象的地址相关联 在CPython实现中,这样的地址存储可能发生在较低的级别。但是 我对C的了解还不足以从源代码中推断出这一点,我也不知道从源代码中的什么地方开始查找 所以,我的问题是: 在CPython的实现中,对象地址是如何存储在指向它们的变量中的,或者以其他方式与之关联的 在模块作用域或类作用域中,变量在Python dict中实现为条目。指向对象的指针存储在dict中。在较旧

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

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

所以,我的问题是:


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

在模块作用域或类作用域中,变量在Python dict中实现为条目。指向对象的指针存储在dict中。在较旧的CPython版本中,指针直接存储在dict的底层哈希表中,但自CPython 3.6以来,哈希表现在将索引存储到dict条目的密集数组中,指针就在这个数组中。还有一些拆分键dict的工作方式稍有不同。它们用于优化对象属性,这些属性可能是或可能不被认为是变量。 在函数范围内,Python创建一个堆栈帧对象来存储给定函数执行的数据,堆栈帧对象包括一个指向变量值的指针数组。变量作为该数组中的条目实现,值的指针存储在数组中,每个变量都有一个固定的索引。字节码编译器负责确定这些索引