关于python中"对象的引用"的问题

h_heo 2018-05-03 09:55:58

class Test(object):
pass

b = Test()

print(id(b))

上面的b是一个引用,指向了一个Test对象,用id()可以知道对象的内存地址,那么这个b对象引用在内存有没有地址存着它呢,有的话,怎么样可以知道它的地址? 还是怎么样理解这个引用才正确,这个引用在内存中是一个怎么样的东西?
...全文
520 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
混沌鳄鱼 2018-05-03
  • 打赏
  • 举报
回复

Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> class Test: pass

>>> b = Test()
>>> id(b)
1869634166736
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'Test': <class '__main__.Test'>, 'b': <__main__.Test object at 0x000001B34EE15FD0>}
>>> hex(1869634166736)
'0x1b34ee15fd0'
>>> 
变量 b 不是一个对象了, 只是一个字符串标签绑上了对象地址,存放在globals 这个字典里。
oyljerry 2018-05-03
  • 打赏
  • 举报
回复
有一个实际的物理地址,但是python是高级语言,它一般不会直接访问这个实际的地址,所有有一个id来做为标识,python虚拟机通过它来映射到最终的物理地址。所以b可以理解为一个引用
陈年椰子 2018-05-03
  • 打赏
  • 举报
回复
建议找本计算机原理的书看看。 按图书馆的图书卡理解。 可以理解成 b 是一本书。存在12号书架,03层,顺序号45 , b 的地址是120345 图书卡上写着 a 012399 b 120345 你要想看b这本书, 必须要通过 120345 这个地址去找, 也可以理解为 就是一个引用。
h_heo 2018-05-03
  • 打赏
  • 举报
回复
引用 3 楼 xpresslink 的回复:

Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> class Test: pass

>>> b = Test()
>>> id(b)
1869634166736
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'Test': <class '__main__.Test'>, 'b': <__main__.Test object at 0x000001B34EE15FD0>}
>>> hex(1869634166736)
'0x1b34ee15fd0'
>>> 
变量 b 不是一个对象了, 只是一个字符串标签绑上了对象地址,存放在globals 这个字典里。
我还想请教你一个问题, 有没有方法知道,存着局部变量里的一个这样的字典
h_heo 2018-05-03
  • 打赏
  • 举报
回复
引用 3 楼 xpresslink 的回复:

Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> class Test: pass

>>> b = Test()
>>> id(b)
1869634166736
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'Test': <class '__main__.Test'>, 'b': <__main__.Test object at 0x000001B34EE15FD0>}
>>> hex(1869634166736)
'0x1b34ee15fd0'
>>> 
变量 b 不是一个对象了, 只是一个字符串标签绑上了对象地址,存放在globals 这个字典里。
谢谢你的回复 你这个回复 好像我明白点了什么 谢谢
h_heo 2018-05-03
  • 打赏
  • 举报
回复
引用 1 楼 seakingx 的回复:
建议找本计算机原理的书看看。 按图书馆的图书卡理解。 可以理解成 b 是一本书。存在12号书架,03层,顺序号45 , b 的地址是120345 图书卡上写着 a 012399 b 120345 你要想看b这本书, 必须要通过 120345 这个地址去找, 也可以理解为 就是一个引用。
谢谢你的回复,我还是不理解b在内存是怎么存在的,这样比喻:书卡是内存条, 现实中,b的书名和书对应位置写在书卡(内存上),那么在内存上的书名和对应的位置也要一个地址来存放它?
  • 打赏
  • 举报
回复
就像是贴了标签一样,b就是一个指向test()的标签,就像指针一样,还有git里的分支
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

37,740

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧