【发布时间】:2019-08-07 20:38:51
【问题描述】:
def func(t):
t = 5
print('inside function', t)
print('inside function address = ', id(hex(t)))
x = 3
func(x)
print('outside function',x)
print('outside function address = ', id(hex(x)))
打印出来的
inside function 5
inside function address = 31255648
outside function 3
outside function address = 31255648
我的理解是在没有赋值的函数中引用的变量将使用其范围之外的变量。但是如果函数有赋值,那么它会在内存的新空间中创建一个新变量并在那里赋值。
为什么函数 id 找到的是参数的原始地址,而不是新创建的变量的地址?
【问题讨论】:
-
您确定完全按照您提供的方式运行代码吗?这些结果看起来很奇怪。
-
hex(x)是一个字符串。你得到一个字符串的id,它被创建然后立即被放弃。 ID 只需要在其各自对象的生命周期内是唯一的。由于字符串不同时存在,所以它们可以有相同的id。 -
@PatrickArtner 呃,这与整数缓存完全无关。这里发生的只是创建一个字符串,然后销毁,然后在与前一个相同的内存位置创建另一个字符串。
-
python 中的整数是缓存,如果在 -5 到 255 左右的范围内 - 无论您从哪里使用它们,它们都获得相同的 id。但是,您正在打印您立即丢弃的 int 十六进制字符串值的 id
-
@Aran-Fey 是的 - 误读并再次修复
标签: python