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

问题描述 投票:2回答:1

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

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

所以,我的问题是:

在CPython的实现中,对象地址如何存储在指向它们的变量中或与之相关联?

python c python-3.x cpython python-internals
1个回答
3
投票

在模块作用域或类作用域中,变量在Python dict中作为条目实现。指向对象的指针存储在字典中。在较早的CPython版本中,指针直接存储在dict的基础哈希表中,但是自CPython 3.6起,哈希表现在将索引存储到密集的值指针数组中,并且该指针位于该数组中。

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

© www.soinside.com 2019 - 2024. All rights reserved.