如何获取变量的唯一识别号码或字符串
使用
a=7
print hex(id(a))
得到的结果是:
0x7f866b425e58
我打算把这个输出(转换成字符串)作为每个类对象的识别号码,我需要确保在程序运行时它是保持不变的。我还想知道第二个字符是否总是'x'(在mac、win和linux上)。如果我选择hex(id)
是个错误,请告诉我有什么更好的选择。
2 个回答
-1
你可能想看看 hash(obj) https://docs.python.org/2/library/functions.html#hash
这个函数会返回对象的哈希值(如果这个对象有的话)。哈希值是整数,用来在查找字典时快速比较字典的键。相同的数字值会有相同的哈希值(即使它们的类型不同,比如 1 和 1.0)。
7
id()
函数可以保证在对象存在期间,它返回的标识符是稳定的,但如果对象被销毁,这个标识符可能会被重新使用。
当你使用 hex()
函数时,前面总会有 0x
这个前缀。你也可以使用 format(..., 'x')
来格式化成没有前缀的十六进制数字:
>>> a = 7
>>> print format(id(a), 'x')
7f866b425e58
你可以考虑使用一个 itertools.count()
对象 来生成唯一的标识符,可能加上前缀,或者如果你需要和其他标识符区分开,可以把数字取反:
from itertools import count
id_counter = count()
每次需要一个新的标识符时,可以使用:
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