gpt4 book ai didi

python - 识别对象,为什么 id(...) 的返回值会改变?

转载 作者:太空狗 更新时间:2023-10-29 17:35:52 28 4
gpt4 key购买 nike

id(object)

This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime.

你能解释一下这个输出吗?为什么 j 的 id 会改变?

>>> i=10  
>>> id(i)
6337824
>>> j=10
>>> id(j)
6337824
>>> j=j+1
>>> id(j)
6337800
>>> id(i)
6337824

最佳答案

因为整数是不可变的,所以每个整数值都是一个具有唯一 ID 的不同对象。整数 1011 具有不同的 id。执行 j=j+1 不会更改现有整数对象的值,而是将 j 更改为指向 11 的对象.

看看当我们独立创建一个新变量 k 并为其赋值 11 时会发生什么:

>>> j=10
>>> id(j)
8402204
>>> j=j+1
>>> id(j)
8402192
>>> k=11
>>> id(k)
8402192

请注意,并不总是每个整数都有一个且只有一个对应对象。这只发生在 Python 决定缓存的小整数上。它不会发生在大整数上:

>>> x = 123456789
>>> id(x)
8404568
>>> y = 123456789
>>> id(y)
8404604

参见 https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong:

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.

关于python - 识别对象,为什么 id(...) 的返回值会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3402679/

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