Python 变量 Variable 动态绑定

故事扮演 提交于 2019-11-28 11:06:33

为何 Python 变量没有 Data Type 概念 ? 可以与任意 Data Type 绑定?

Python 变量 Variable 与其他程式语言不同之处在于:

> variable 不是对内存地址 ram address 的引用,而是对 data 的引用

> variable 被重新 assign 新値时,Python 新分配此data 存储空间,而 variable 指向此新的地址

例如: 启动 Python时,其 name space 如下:

>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <cl
ass '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {
}, '__builtins__': <module 'builtins' (built-in)>}

 

当将 5 给 X 时,其先分配 5 这存储空间,此空间的位置地址为 8791319470864,而 X 存储此地址,指向 5 这物件:


>>> X = 5
>>> id(X)
8791319470864

所以 name space 存在一个 variable 其 value 为 5


>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <cl
ass '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {
}, '__builtins__': <module 'builtins' (built-in)>, 'X': 5}

 

当重新指定 X 为字串 'Hello' 时,Python 会分配存储空间给 'Hello',其空间所在的地址为 35659880,而 X 存储此地址,指向 'Hello':


>>> X = 'Hello'
>>> id(X)
35659880

再次查看全域 Global 命名空间,发现 X 指向的値为最新的 'Hello',之前的値 5 已不在被指引了。但,物件 5 仍存储在 RAM 中。


>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <cl
ass '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {
}, '__builtins__': <module 'builtins' (built-in)>, 'X': 'Hello'}
>>> id(5)
8791319470864


 

结论:

Python 的变量 variable 是动态绑定,即在 Run Time 执行中才动态绑定,这与 C / C++ / Java 不同。后者在编译 compiling 即绑定,为静态绑定,绑定后不能更改资料型态 data type。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!