疑问
- 我们真的理解变量是什么了吗
要理解好变量的概念需要以下
- 内存分配
- 内存分区
概念
-
通俗概念 通俗概念
-
专业概念专业概念
对比可以发现通俗理解虽然通俗易学易懂但是不够严谨,专业理解虽然严谨但是有些刻板和晦涩。
探索本质
内存
-
内存分区
内存模型 -
内存分配
分配模型 -
模型解释
简化模型便于理解我们暂且不管代码区和静态区,只关注堆和栈模型中很容易看到一个一个区域每个区都可以继续分为很多小格子(更多的小区)我们有办法把这大片区域,叫做堆或栈那问题来了,每个小格子叫什么名字,如上述所说我们把值放入小格子里,目的是用值去计算,想用它却不知道名字这有点说不过去,其实不然,每个小格子没有名字但是有位置坐标。例如地图的经纬度。某点坐标 116.404144,39.909493,同理堆和栈上每一个小点都有一个十六进制的地址来标注它(代表所占空间)如0x00,0x01。
对比
if __name__ == '__main__':
0x01 = [1,3,4,8,2,10]
0x02 = arr[0]
for 0x03 in arr:
if 0x02 > 0x03:
0x02 = 0x03
print 0x02
if __name__ == '__main__':
arr = [1,3,4,8,2,10]
_min = arr[0]
for n in arr:
if _min > n:
_min = n
print _min
本质
说明
正如上述所说 116.404144,39.909493 这个坐标我不知道是哪里,但是如果说北京天安门广场呢,其实两个字符串表示的是同一个位置。从此我们可以引出一个别名的概念"北京天安门"就是116.404144,39.909493的别名,优点不言而喻就是便于使用和理解。
纠正误区
我们可以把房子挂个门牌号以标识房子的位置,大多时候可以用门牌号代表这座房子,但是你要说门牌号就是房子这就不太确切了,门牌号是门牌号,房子是房子,两个不同的事物。
初级编程时我们大抵不用了解那么细致也不会有什么影响,但在高阶编程或者大规模编程时就会出现一些意想不到的BUG。
举例
例1

例1

例2
造成这些现象的根本原因是因为换的只是别名(一个代号而已),内存位置地址(指针)并没有改变,但如果理解成别名就是空间,门牌号就是房子的话就无法理解这些现象了。



