【问题标题】:How is variable assignment implemented in CPython?CPython中变量赋值是如何实现的?
【发布时间】:2020-08-14 09:14:57
【问题描述】:

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

这种“地址存储”可能发生在 CPython 实现的低层。但 我对 C 的了解不足以从源代码中推断出这一点,我也不知道从源代码的哪个位置开始查找。

所以,我的问题是:

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

【问题讨论】:

    标签: python c python-3.x cpython python-internals


    【解决方案1】:

    在模块范围或类范围中,变量被实现为 Python 字典中的条目。指向对象的指针存储在字典中。在较旧的 CPython 版本中,指针直接存储在 dict 的底层哈希表中,但从 CPython 3.6 开始,哈希表现在将索引存储到 dict 条目的密集数组中,并且指针位于该数组中。 (还有一些拆分键字典的工作方式略有不同。它们用于优化对象属性,您可能会或可能不会将其视为变量。)

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

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 2014-04-30
      • 2012-01-13
      相关资源
      最近更新 更多