今天正在看学习视频,突然想到一个问题.就是当我在全局定义了一个变量后,在函数内部再次敲出这个变量名时,这个变量是之前定义的那个全局变量,还是说是一个和全局变量同名的新变量.
结论先行:
-5到256之间的整数的内存地址是固定的(闭区间),并不会因为被赋值给一个变量而开辟新的内存区域来储存这些常用整数值
下文的斜体字表示对于输出结果的思考
实验如下
情形1: 在外部定义,在内部使用
a = 1
print(id(a))
def A():
a
print(id(a))
A()
结果1:
140727915688784
140727915688784
情形2: 外部定义,内部再次以同名定义同样的值
a = 1
print(id(a))
def A():
a = 1
print(id(a))
A()
结果2:
140727915688784
140727915688784
情形3:
a = 1
print(id(a))
def A():
a = 2
print(id(a))
A()
print(a)
结果3:
140727915688784
140727915688816
1
情形1默认我的输入是内层访问了外层变量.情形2内部定义了同名且同值变量,返回了相同id号.情形3同名但不同值,id号不同.
这样的结果可能是python先查看内部的同名变量的值是否与外部已定义的变量的值相同,相同就指向之前变量值所在地址,不同就指向新的变量值的地址,
另一种可