今天正在看学习视频,突然想到一个问题.就是当我在全局定义了一个变量后,在函数内部再次敲出这个变量名时,这个变量是之前定义的那个全局变量,还是说是一个和全局变量同名的新变量.
结论先行:
-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先查看内部的同名变量的值是否与外部已定义的变量的值相同,相同就指向之前变量值所在地址,不同就指向新的变量值的地址,
另一种可能就是python已经把一些常用数的位置写死了!如果变量取了这些值,将直接指向这些常用值的固定存放位置.
我倾向于后者,于是又开始了新的验证…
a = 1
print(id(a))
def A():
b = 1
print(id(b))
A()
140727915688784
140727915688784
这样的输出显示:不同名但同值的两个变量,id值相同,证实了我的猜想.那么这样的数据最多到哪里呢?
a = 256
print(id(a))
def A():
b = 256
print(id(b))
A()
print(a)
140727915696944
140727915696944
256
嗯,正数到256,负数到-5.且仅限于整数
最后为了绝对的真理把丘比特重启了一遍,循环遍历了几个整数的id值,和之前相同,看来这些数的位置是永远不变的.不过虽然在同一台电脑上,但如果使用别的解释器,相同的数值很可能id(即内存地址)就不同了,因为不划算.
以下瞎逼逼…
感慨一下终于找到了CSDN的博客编写处!是得在电脑端才能有.
最后,不要用自己的时间,成全别人的梦想.尤其在这个时间价值比较高的时候,快毕业了,得快点学好找到个喜欢的工作才是第一要务.少玩游戏,最好不玩!没有现金流的日子没有安全感.
等以后得写一本书,取名竞争经济学,为我大中华莘莘学子的必然性大多数失败现象以及随之而来的不经济的恶性竞争进行分析总结.万一有解决的灵感那真是造福万千同胞.
祝福我自己