名称及其参考值如何相关?

Bob*_*obi 6 python

阅读Charles Dierbach撰写的"使用Python的计算机科学导论 "一书,我得到一个问题:

  • 在第210页中,他说"引用是一个引用或"指向"另一个实体的位置的值.变量的引用值可以通过内置函数id来确定."

所以引用只是对象内存中的地址.

现在,如果我没有弄错的话,当我创建一个变量时:

>>> a = 3
Run Code Online (Sandbox Code Playgroud)

名称a由Python在命名空间中自动放置.

如果我做:

>>> id(a)
4548344816
Run Code Online (Sandbox Code Playgroud)

我得到了对象3的内存地址,即a引用的对象.

所以我想知道的是,名称a参考值是如何相关的.

我猜测,当名称放入命名空间时,它包含两件事:

  1. 这个名字本身.

  2. 基准值(对象的ID)

像一对可能:a:reference value

如果是这样,是否有一些instrospection工具来查看命名空间中的条目是什么样的?

Mar*_*ers 5

总体而言,Python命名空间是作为字典实现的.键映射到值,在命名空间中,键是标识符,名称和值引用名称绑定的对象.

您已经找到了使"参考"部分可见的工具,即该id()功能.您可以使用globals()locals()函数来访问命名空间映射:

>>> a = 3
>>> globals().keys()
['__builtins__', '__name__', '__doc__', 'a', '__package__']
>>> globals()['a']
3
>>> id(globals()['a'])
4299183224
>>> id(a)
4299183224
Run Code Online (Sandbox Code Playgroud)

但请注意,在函数中,本地命名空间已经过高度优化,返回的字典locals()只是实际结构的单向反映,它只是一个带引用的C数组.您可以通过此映射查看,但不能触摸.

如果您想进一步可视化Python命名空间的工作方式,请在Online Python Tutor中运行您的代码; 它将向您展示内存中的名称和Python对象如何交互.