gpt4 book ai didi

python - 在变量生命周期结束后,变量的 `id()` 是否与分配给它的值相关联?

转载 作者:太空狗 更新时间:2023-10-30 02:19:11 24 4
gpt4 key购买 nike

我正在使用以下代码在 Python 中修改对象的身份:

def f(var1):
print 'Within f and BEFORE modification: var1= '+str(var1)+', id= '+str(id(var1))
var1 = 10
print 'Within f and AFTER modification: var1= '+str(var1)+', id= '+str(id(var1))

def f2(var1):
print 'Within f and BEFORE modification: var1= '+str(var1)+', id= '+str(id(var1))
var1 = 1
print 'Within f and AFTER modification: var1= '+str(var1)+', id= '+str(id(var1))

def f3(var1):
print 'Within f and BEFORE modification: var1= '+str(var1)+', id= '+str(id(var1))
var1 = 10
print 'Within f and AFTER modification: var1= '+str(var1)+', id= '+str(id(var1))


var = 5

print '\n f - var1=10:'
print 'BEFORE FUNCTION CALL: var= '+str(var)+', id= '+str(id(var))
f(var)
print 'AFTER FUNCTION: var= '+str(var)+', id= '+str(id(var))

print '\n f2 - var1=1:'
var = [4,3,1,6]
print 'BEFORE FUNCTION CALL: var= '+str(var)+', id= '+str(id(var))
f2(var)
print 'AFTER FUNCTION: var= '+str(var)+', id= '+str(id(var))

print '\n f3 - var1=10 again:'
var = 7
print 'BEFORE FUNCTION CALL: var= '+str(var)+', id= '+str(id(var))
f3(var)
print 'AFTER FUNCTION: var= '+str(var)+', id= '+str(id(var))

print '\n f2 - var1=1 again:'
var='a'
print 'BEFORE FUNCTION CALL: var= '+str(var)+', id= '+str(id(var))
f2(var)
print 'AFTER FUNCTION: var= '+str(var)+', id= '+str(id(var))

输出:

 f - var1=10:
BEFORE FUNCTION CALL: var= 5, id= 18089816
Within f and BEFORE modification: var1= 5, id= 18089816
Within f and AFTER modification: var1= 10, id= 18089696
AFTER FUNCTION: var= 5, id= 18089816

f2 - var1=1:
BEFORE FUNCTION CALL: var= [4, 3, 1, 6], id= 23884720
Within f and BEFORE modification: var1= [4, 3, 1, 6], id= 23884720
Within f and AFTER modification: var1= 1, id= 18089912
AFTER FUNCTION: var= [4, 3, 1, 6], id= 23884720

f3 - var1=10 again:
BEFORE FUNCTION CALL: var= 7, id= 18089768
Within f and BEFORE modification: var1= 7, id= 18089768
Within f and AFTER modification: var1= 10, id= 18089696
AFTER FUNCTION: var= 7, id= 18089768

f2 - var1=1 again:
BEFORE FUNCTION CALL: var= a, id= 140350777144584
Within f and BEFORE modification: var1= a, id= 140350777144584
Within f and AFTER modification: var1= 1, id= 18089912
AFTER FUNCTION: var= a, id= 140350777144584

我理解对象的标识在其生命周期内保证是唯一的,并且生命周期不重叠的两个对象可能具有相同的 id() 值。

据我所知,在执行不同变量的代码期间我可以获得相同的 id(),但令我惊讶的是在我的代码中相同的 id() 值也与变量值一致。

我的意思是,对于 var1=10,我总是得到相同的 id() 值。具有自己的 id() 值的赋值 var1=1 也会发生同样的情况。即使在不同的函数中执行此赋值也会返回相同的 id()

所以我的问题是:Python 是否会记录以前的变量、值和身份,即使它们的生命周期已过期?

如果代码中存在与之前过期变量值相同的变量赋值,Python是否会检查内存中之前过期变量的记录,是否优先使用相同的id()对于相同的内存值?

我想更多地了解 id() 值重用和 Python 程序中的内存管理。

最佳答案

您问题的简短回答 - Python 缓存 [-5 , 256] 范围内的整数。

所以每当你执行 var1 = 10var1 = 1 时,你总是从整数缓存中取回相同的对象,这就是你看到相同的原因id 甚至在函数的不同运行中也是如此。

如果您对大于或等于 257 的值进行尝试,您可能会看到不同的结果。

一个非常简单的行为示例 -

>>> var1 = 257
>>> var2 = 257
>>> id(var1)
36635792
>>> id(var2)
36636304
>>> var1 = 10
>>> var2 = 10
>>> id(var1)
1642386016
>>> id(var2)
1642386016

关于python - 在变量生命周期结束后,变量的 `id()` 是否与分配给它的值相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830992/

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