使用
a=7
print hex(id(a))
回来:
0x7f866b425e58
打算将此输出(转换为字符串)用作声明的每个类对象的标识号,我需要确保它在程序运行时保持不变。我还需要知道第二个角色是否总是' x' (在mac,win和linux上)。如果我选择hex(id))
做出错误的选择,请告诉我什么是更好的选择。
答案 0 :(得分:7)
id()
保证在对象的生命周期内保持稳定,但如果对象被销毁,则可以重用标识符。
使用0x
时,hex()
前缀始终存在。您也可以使用format(..., 'x')
格式化为十六进制数字,而无需前缀:
>>> a = 7
>>> print format(id(a), 'x')
7f866b425e58
您最好只使用itertools.count()
object来制作您的唯一ID,可能带有前缀,或者如果您需要将这些数字与其他数字区分开来,则取消数字:
from itertools import count
id_counter = count()
每次需要新ID时,请使用:
next(id_counter)
并将其作为属性存储在您的实例上。你可以通过给它一个消极的步骤来使count()
计数向下:
id_counter = count(-1, -1)
演示:
>>> from itertools import count
>>> id_counter = count(-1, -1)
>>> next(id_counter)
-1
>>> next(id_counter)
-2
答案 1 :(得分:-1)
您可能希望查看hash(obj)https://docs.python.org/2/library/functions.html#hash
返回对象的哈希值(如果有)。哈希值是 整数。它们用于在a期间快速比较字典键 字典查找。比较相等的数值具有相同的值 哈希值(即使它们的类型不同,就像1的情况一样) 和1.0)。