名称的Python id和’??__main__’不同
发布时间:2020-12-20 12:20:12 所属栏目:Python 来源:网络整理
导读:通常,如果我为变量分配一些值,然后检查它们的ID,我希望它们是相同的,因为 python实际上只是给我的对象一个“名称”.这可以在下面的代码中看到: a = 3 id(a)19845928 id(3)19845928 问题是当我用“名字”执行相同的操作时 __name__'__main__' id(__name__)19
通常,如果我为变量分配一些值,然后检查它们的ID,我希望它们是相同的,因为
python实际上只是给我的对象一个“名称”.这可以在下面的代码中看到:
>>> a = 3 >>> id(a) 19845928 >>> id(3) 19845928 问题是当我用“名字”执行相同的操作时 >>> __name__ '__main__' >>> id(__name__) 19652416 >>> id('__main__') 19652448 那些ID怎么会有所不同,它们不应该是一样的吗?因为__name__也应该只是一个引用. 解决方法
id()基本上给出了数据的内存指针.虽然字符串是不可变的,但不保证它们是实例化的.这意味着一些具有相同值的字符串具有不同的指针.
对于整数(特别是小整数),指针将是相同的,所以你的3个例子工作正常. @KartikAnand:你检查“同一个对象”的方式是有效的,尽管通常的方法是使用x是y.问题是它们不是同一个对象,并不能保证.它们只是具有相同的价值.请注意,当您执行“__main__”时,您将创建一个新对象.有时python做了一个很好的优化,并重新使用以前创建的相同值的字符串,但它没有. Kartik的目标是“验证赋值是否以某种方式引用,而对象不是即时创建的”.为此,请避免创建新对象(无字符串文字). >>> __name__ '__main__' >>> x = __name__ >>> id(__name__) 3078339808L >>> id(x) 3078339808L >>> __name__ is x True (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |