变量的声明、赋值
学过C语言以及其他语言的人都知道,变量的声明包括两个部分:变量类型以及变量名字,最后还要加一个分隔符,类似于这样:
首先写一个数据类型,后面写一个变量的名字,然后就是定义了一个变量,那么这个过程是什么呢?
在解释器中,看到数据类型int,首先划了一块内存,然后命名为num,我们赋值其实就是向这块内存中存入这个数据,如图:
之前已经讲过,在Python中不需要定义变量,可以直接拿一个名字去赋值,然后就可以使用,并且在使用过程中这个变量的数据类型还可以一直发生变化,类似于这样:
所以在Python中,解释器并不是类似于C语言那样去解释程序的,和C语言相反,Python中,是划了一块内存,存入了一个数据,然后用一个变量去指向这块内存,当你重新赋值时,又指向另一块内存,而没有变量指向的内存,由Python解释器内置的垃圾回收直接回收掉。
我们可以看到,每次我们重新赋值后,变量的地址(即id())就发生了变化。
当我们执行赋值语句,将我们的a中的值赋值给b时,查看一下地址我们发现,我们的a和b的地址指向的是同一块,所以,Python中的变量赋值过程是这样的:
所以如果我们改变这块地址中的东西,不管我们是使用a还是b去改变这块内存,改变之后两个变量的值都会被改变。
可是,有人会发现这样的问题:
有人会说,你是不是骗我啊,这明明是a改变了b没改变啊!!
其实,这种情况下,a的地址已经改变了,a的地址已经从100的地址指向1000,而b指向的地址仍然是100,所以会出现这种情况。
换一种方式:
我们去在这个内存中追加赋值,而不是直接赋值,就可以看到,两个变量都发生了变化,这次我们用b去追加赋值:
同样,也是两个都发生了变化!
在Python中,我们使用变量时一定注意,不要和其他语言一样,如果那样,可能会引起不必要的BUG,同时还不容易发现。
降落
今天就到这里,谢谢观看
感觉不错的话,分享一下吧
领取专属 10元无门槛券
私享最新 技术干货