![Python程序设计应用教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/751/31729751/b_31729751.jpg)
2.2 常量和变量
2.2.1 变量
变量的概念基本上和初中代数中的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
变量在程序中用一个变量名表示,变量名必须是大小写英文、数字和“_”的组合,且不能以数字开头。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026003.jpg?sign=1739260560-h9DHIcpOOUyHGrumJxVmGQf6LBoWLIft-0-ce79d6e65efc9ee85413b4f5867152ef)
在Python中,等号(=)是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026004.jpg?sign=1739260560-tHAYfw0vui7azeaZE7FtYQIt5PZYZslz-0-a26ef492e63e3a496c6e4a43df69325f)
Python语言采用基于值的内存管理方式,不同的值分配不同的内存空间。可理解为,Python变量并不是某一个固定内存单元的标识,而是对内存中存储的某个数据的引用,这个引用是可以动态改变的。
这种变量本身类型不固定的语言称为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值时类型不匹配,就会报错。例如,C语言是静态语言,赋值语句如下(//表示注释):
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026005.jpg?sign=1739260560-gaopCADXAtIfjbOe0gSSjnrT3KQgqXwM-0-d6aa151484e1470dcbab86370e749d9b)
同静态语言相比,动态语言更灵活,就是这个原因。
不要把赋值语句的等号等同于数学的等号。例如下面的代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027001.jpg?sign=1739260560-5KNrTInQvSFWtBwgMToO4ca6DxScXFKA-0-e4ccf9846f2fe5690e9442eec18c0ef2)
如果从数学上理解x = x+2无论如何是不成立的。在程序中,赋值语句先计算右侧的表达式x+2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12。
理解变量在计算机内存中的表示也非常重要。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027002.jpg?sign=1739260560-RgghDKlkH46lrNUSn76kgaNhObRbsfig-0-639471bc6c4fbb6d48125d2a871bf281)
Python解释器做了两件事情:
(1)在内存中创建了一个'ABC'的字符串。
(2)在内存中创建了一个名为a的变量,并把它指向'ABC',如图2-1所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027003.jpg?sign=1739260560-k4BYGFS93sWHEqDmenD3EnCBSKIYedAB-0-e7668ddcf8881b36d58b1330d14043c3)
图2-1 a变量指向'ABC'
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据。例如下面的代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027004.jpg?sign=1739260560-9YFD7GRrQwmV73oWSUwdBUDLC6axNNNZ-0-a4edd7aa43daf683cbaf970a9858bb76)
最后一行打印出变量b的内容到底是'ABC',还是'XYZ'?如果从数学意义上理解,就会错误地得出b和a相同,也应该是'XYZ',但实际上b的值是'ABC'。下面分析一下执行过程:
执行a = 'ABC',Python解释器创建了字符串'ABC'和变量a,并把a指向'ABC'。
执行b = a,解释器创建了变量b,并把b指向a指向的字符串'ABC',如图2-2所示。
执行a = 'XYZ',解释器创建了字符串'XYZ',并把a指向'XYZ',但b没有更改,如图2-3所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027005.jpg?sign=1739260560-SyOc2kMiGxAMGrii39q27YWO1VfLsPk8-0-27ab86406f13e2aba609ae11e3aa828a)
图2-2 a、b变量都指向'ABC'
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027006.jpg?sign=1739260560-SwdDXgF1Wb7qm9sF4g79tBJo0jxwMMjl-0-304ddebe132a6cb1810b1948bdf848ec)
图2-3 a变量指向'XYZ'
所以,最后打印变量b的结果自然是'ABC'。
内置的type()函数可以用来查询变量的数据类型。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027007.jpg?sign=1739260560-4OnqG8LUuIpxW16q755urI3xfL6IrIRW-0-2a8a6233de3a2b4c277f194ed6fb9a6c)
当变量不再需要时,Python会自动回收内存空间,也可以使用del语句删除一些变量。
del语句的语法:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027008.jpg?sign=1739260560-EGM9hWEJr9CE6OQANwW6Q5IaEHNxvfAx-0-dd8f4774f75c913c80721d899d64ead5)
可以通过使用del语句删除单个或多个变量对象。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027009.jpg?sign=1739260560-FtmpwVHcyGp9Mr4j6CWfN7NcHWugjyX3-0-428c7783bf309cce8068bf7e52de7fe1)
2.2.2 常量
所谓常量就是不能变的变量,例如,常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00028002.jpg?sign=1739260560-uQxFzbmOPzi5wvUrtjq4VU4Wsjbq78uR-0-2c32b15e4c73c71e9d76e46492d2babf)
但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变。所以,用全部大写的变量名表示常量只是一个习惯上的用法,实际上可以改变变量PI的值。