Python 如何获取变量唯一标识号或字符串

Python 如何获取变量唯一标识号或字符串,python,Python,使用 回来: a=7 print hex(id(a)) 为了使用这个输出(转换成字符串)作为声明的每个类对象的标识号,我需要确保在程序运行时它保持不变。我还需要知道第二个字符是否总是“x”(在mac、win和linux上)。如果我选择了hex(id))做了一个错误的选择,请告诉我什么是更好的选择 id()保证在对象的生命周期内保持稳定,但如果对象被销毁,则可以重用该标识符 当使用hex()时,0x前缀总是在那里。您还可以使用格式(…,'x')将格式设置为不带前缀的十六进制数: 0x7f866b

使用

回来:

a=7
print hex(id(a))
为了使用这个输出(转换成字符串)作为声明的每个类对象的标识号,我需要确保在程序运行时它保持不变。我还需要知道第二个字符是否总是“x”(在mac、win和linux上)。如果我选择了
hex(id))
做了一个错误的选择,请告诉我什么是更好的选择

id()
保证在对象的生命周期内保持稳定,但如果对象被销毁,则可以重用该标识符

当使用
hex()
时,
0x
前缀总是在那里。您还可以使用
格式(…,'x')
将格式设置为不带前缀的十六进制数:

0x7f866b425e58
如果您需要将这些ID与其他ID区分开来,您最好只使用一个来生成您的唯一ID,可能带有前缀,或者通过否定数字:

>>> a = 7 
>>> print format(id(a), 'x')
7f866b425e58
每次需要新id时,请使用:

from itertools import count

id_counter = count()
并将其作为属性存储在实例上。您可以通过给
count()
一个负阶跃使其倒计时:

next(id_counter)
演示:

id()

当使用
hex()
时,
0x
前缀总是在那里。您还可以使用
格式(…,'x')
将格式设置为不带前缀的十六进制数:

0x7f866b425e58
如果您需要将这些ID与其他ID区分开来,您最好只使用一个来生成您的唯一ID,可能带有前缀,或者通过否定数字:

>>> a = 7 
>>> print format(id(a), 'x')
7f866b425e58
每次需要新id时,请使用:

from itertools import count

id_counter = count()
并将其作为属性存储在实例上。您可以通过给
count()
一个负阶跃使其倒计时:

next(id_counter)
演示:


您可能想看看hash(obj)

返回对象的哈希值(如果有)。散列值是 整数。它们用于在搜索过程中快速比较字典键 查字典。比较相等的数值具有相同的值 散列值(即使它们是不同的类型,例如1 和1.0)


您可能想看看hash(obj)

返回对象的哈希值(如果有)。散列值是 整数。它们用于在搜索过程中快速比较字典键 查字典。比较相等的数值具有相同的值 散列值(即使它们是不同的类型,例如1 和1.0)


哈希标识一个值,而不是唯一的。OP想要识别特定的对象。OP说“…我需要确保程序运行时它保持不变…”。我不能100%确定他想要的是身份还是价值。@MartijnPieters但这真的是OP需要的吗?对我来说,这闻起来像是一个例子。@jamessan:我同意OP澄清它们的用例会有帮助。所有的对象实例都是数据库实体。每个数据库都有一个由数据库分配的唯一id号。另一组这样的实例是已声明但尚未写入数据库的实例(还没有数据库id号)。围绕唯一id号设计的完整代码。没有ID的实例(未发布的实例)不属于整个设计。所以我需要能够用假的数据库ID替换还不存在的数据库ID。哈希标识一个值,而不是唯一的。OP想要识别特定的对象。OP说“…我需要确保程序运行时它保持不变…”。我不能100%确定他想要的是身份还是价值。@MartijnPieters但这真的是OP需要的吗?对我来说,这闻起来像是一个例子。@jamessan:我同意OP澄清它们的用例会有帮助。所有的对象实例都是数据库实体。每个数据库都有一个由数据库分配的唯一id号。另一组这样的实例是已声明但尚未写入数据库的实例(还没有数据库id号)。围绕唯一id号设计的完整代码。没有ID的实例(未发布的实例)不属于整个设计。所以我需要能够用伪造的数据库ID替换还不存在的数据库ID。我喜欢使用itertools.count()的想法!谢谢这是一个伟大的!实际上,我已经在使用负数来区分尚未写入数据库的对象。这正是我需要的。我喜欢使用itertools.count()的想法!谢谢这是一个伟大的!实际上,我已经在使用负数来区分尚未写入数据库的对象。这正是我所需要的。