|
发表于 2022-3-17 23:39:57
|
显示全部楼层
本帖最后由 阿奇_o 于 2022-3-17 23:45 编辑
其实呢,id() 返回的并不是 "真实的内存地址",只是多数时候可以相当于对象的"内存地址"。 你可以看看 print(id(a), id(b), a == b) 比较的结果是 True
要获取真实的内存地址,要用底层的 ctypes.addressof(c_obj) , 如下:
- >>> a = '中国'
- >>> b = '中国'
- >>> print(id(a), id(b), a == b)
- 2841032603472 2841028106352 True
- >>> print(a==b, a is b) # 比较的是"值";判断是否"相同",用的是 id()
- True False
- # 查看真正的内存地址:
- >>> from ctypes import c_wchar_p, addressof
- >>> addressof( c_wchar_p(a) )
- 2841028157712
- >>> addressof( c_wchar_p(b) )
- 2841028157712
- # 但是呢,有趣的是:
- >>> c_wchar_p(a) == c_wchar_p(b)
- False
- >>> c_wchar_p(a) is c_wchar_p(b)
- False
- >>> c_wchar_p(a).value
- '中国'
- >>> c_wchar_p(b).value
- '中国'
- >>> type(c_wchar_p(a))
- <class 'ctypes.c_wchar_p'>
- # 还想深入的话,就自己研究C语言吧, 我暂时到这先打注了 ^_
复制代码 |
|