阅读书籍"使用Python" 介绍计算机科学,Charles Dierbach,我有一个问题:
所以引用只是对象内存中的地址。
现在,如果我没有弄错的话,当我创建一个像:
这样的变量时>>> a = 3
名称 a 由Python自动放入命名空间。
如果我这样做:
>>> id(a)
4548344816
我得到的对象 3 的记忆地址是 a 引用的地址。
所以我想知道的是,名称 a 和参考值是如何相关的。
我猜测,当名称放入命名空间时,它包含两件事:
名称本身。
参考值(对象的ID)
一对可能:a:reference value
?
如果是这样,是否有一些instrospection工具来查看命名空间中的条目是什么样的?
答案 0 :(得分:5)
Python命名空间总体上是作为字典实现的。键映射到值,在命名空间中,键是标识符,名称和值引用名称绑定的对象。
您已经找到了制作'参考'部分可见,id()
功能。您可以使用globals()
和locals()
函数来访问命名空间映射:
>>> a = 3
>>> globals().keys()
['__builtins__', '__name__', '__doc__', 'a', '__package__']
>>> globals()['a']
3
>>> id(globals()['a'])
4299183224
>>> id(a)
4299183224
但请注意,在函数中,本地命名空间已经过高度优化,locals()
返回的字典只是实际结构的单向反映,它只是一个带引用的C数组。您可以通过此映射查看,但不能触摸。
如果您想进一步了解Python命名空间的工作方式,请在Online Python Tutor中运行您的代码;它将向您展示内存中的名称和Python对象如何交互。