在 python 中使用 id() 比较列表(整数)
当我尝试比较由整数组成的列表时,我在 Python 中发现了一件奇怪的事情。
例如:
In [35]: id(range(1,5)),id(range(1,15)),id(range(16,0,-1))
Out[35]: (155687404, 155687404, 155687404)
第一季度: 为什么它们的 id() 值相同?既然它们看起来不同,怎么可能是一样的呢?
第二季度: 如何通过 id() 值比较整数列表?
第三季度: 更好奇的是,Python 中的 id() 值是如何计算的?
I found a strange thing in Python when I tried to compare lists composed of integers.
For example:
In [35]: id(range(1,5)),id(range(1,15)),id(range(16,0,-1))
Out[35]: (155687404, 155687404, 155687404)
Q1:
Why their id() values are the same? And how can they be the same since they look different?
Q2:
How can I compare lists of integers by id() values?
Q3:
To be more inquisitive, how is the id() value computed in Python?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
直接来自 python 的文档:
您可以获取 md5 哈希值来比较这些对象:
Directly from python's doc:
You could get the md5 hash to compare theese objects:
id 在某种程度上对应于对象的内存位置。您不使用创建的对象,因此它们会被自动删除。当您创建下一个时,它只使用相同的地址。所以你有相同的 id,但它们是不同的对象。
尝试:
The id correspond somehow to the memory location of the object. You don't use the created objects, so as a conseaquence they are automatically deleted. When you create the next one, it just use the same address. So you have the same id, but they are different objetcs.
Try:
这是因为在调用 id() 之后,您的范围就超出了范围 - 然后它们的 id 会被重用。
如果它们仍然可以访问,那么它们的 id 将会不同。试试这个:
This is because just after calling id() your ranges go out of scope - their ids are then reused.
If they were still accessible then their id will be different. Try this: