标签:python
通常,如果我为变量分配一些值,然后检查它们的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
标签:python 来源: https://codeday.me/bug/20190715/1469878.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。