我知道 Python 中的变量实际上只是某些底层对象的引用/指针。由于它们是指针,我猜它们以某种方式“存储”或以其他方式与它们引用的对象的地址相关联。
这样的“地址存储”可能发生在 CPython 实现的低层。但
我对 C 的了解还不足以从源代码中推断出这一点,我也不知道从源代码中的哪里开始查找。
所以,我的问题是:
在 CPython 的实现中,对象地址如何存储在指向它们的变量中,或者如何与指向它们的变量关联?
在模块作用域或类作用域中,变量被实现为 Python 字典中的条目。指向对象的指针存储在字典中。在旧的 CPython 版本中,指针直接存储在 dict 的底层哈希表中,但从 CPython 3.6 开始,哈希表现在将索引存储到 dict 条目的密集数组中,并且指针位于该数组中。 (还有一些工作方式稍有不同的分键字典。它们用于优化对象属性,您可能会或可能不会将其视为变量。)
在函数作用域中,Python 创建一个堆栈帧对象来存储给定函数执行的数据,并且堆栈帧对象包含指向变量值的指针数组。变量被实现为该数组中的条目,并且指向值的指针存储在数组中,位于每个变量的固定索引处。 (字节码编译器负责确定这些索引。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)