>> id(id) 140117478913736 >>> id(id) 140117478913736 >>> id-6ren">
gpt4 book ai didi

python - 为什么 id(id) 和 id(id(id)) 总是返回相同的值,而 id(id(id(id))) "loops"超过 3 个值?

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:46 30 4
gpt4 key购买 nike

出现在 python 2.7.8 中。 3.4.1 不会发生这种情况。

示例:

>>> id(id)
140117478913736
>>> id(id)
140117478913736
>>> id(id)
140117478913736
>>> id(id(id))
38775176
>>> id(id(id))
38775176
>>> id(id(id))
38775176
>>> id(id(id(id)))
38775152
>>> id(id(id(id)))
38775224
>>> id(id(id(id)))
38775176

...等。最后一行将始终返回这三个值,循环遍历它们。

5 "id": 总是相同的值。

6 "id": 循环三个值。

最佳答案

id() 的结果保证在您传入的对象的持续时间内是相同的。

因此,只要参数 id 存在,id(id) 就会产生相同的结果。这是永远的。

但是,id(id(id))只会产生相同的结果,只要id(id)的结果存在,但这个对象只是临时的.它可以巧合多次返回相同的结果,但您不能依赖这种行为。我可以证明:

>>> id(id(id))
12345
>>> id(id(id))
12345 # coincidence!
>>> [1, 2, 3]
[1, 2, 3]
>>> id(id(id))
98765 # now it's different!

因此,您看到的只是 Python 实现中分配模式的巧合。

为什么三循环?

在您的 Python 中,我想这正在发生。左边是被求值的表达式,右边是堆。

id(id(id))          [ ]
id(140117478913736) [ 140117478913736 ] # evaluate
38775176 [ 140117478913736, 38775176 ] # evaluate
[ _ , 38775176 ] # decref

id(id(id)) [ _ , 38775176 ]
id(140117478913736) [ 140117478913736, 38775176 ] # evaluate

你可以看到 id(id(id)),每个对象都占据堆中的第一个槽,因为 id(id) 总是进入同一个槽插槽,你总是得到相同的结果......除非你分配一些东西!

关于python - 为什么 id(id) 和 id(id(id)) 总是返回相同的值,而 id(id(id(id))) "loops"超过 3 个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318978/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com