本帖最后由 阿奇_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语言吧, 我暂时到这先打注了 ^_
|