阅读Charles Dierbach撰写的"使用Python的计算机科学导论 "一书,我得到一个问题:
所以引用只是对象内存中的地址.
现在,如果我没有弄错的话,当我创建一个变量时:
>>> a = 3
Run Code Online (Sandbox Code Playgroud)
名称a由Python在命名空间中自动放置.
如果我做:
>>> id(a)
4548344816
Run Code Online (Sandbox Code Playgroud)
我得到了对象3的内存地址,即a引用的对象.
所以我想知道的是,名称a和参考值是如何相关的.
我猜测,当名称放入命名空间时,它包含两件事:
这个名字本身.
的基准值(对象的ID)
像一对可能:a:reference value?
如果是这样,是否有一些instrospection工具来查看命名空间中的条目是什么样的?
总体而言,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对象如何交互.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |