名称的Python id和’​​__main__’不同

名称的Python id和’​​__main__’不同,第1张

概述通常,如果我为变量分配一些值,然后检查它们的ID,我希望它们是相同的,因为 python实际上只是给我的对象一个“名称”.这可以在下面的代码中看到: >>> a = 3>>> id(a)19845928>>> id(3)19845928 问题是当我用“名字”执行相同的 *** 作时 >>> __name__'__main__'>>> id(__name__)19652416>>> id(' 通常,如果我为变量分配一些值,然后检查它们的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 xTrue
总结

以上是内存溢出为你收集整理的名称的Python id和’​​__main__’不同全部内容,希望文章能够帮你解决名称的Python id和’​​__main__’不同所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194627.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存