![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=1739596987-oKUbiz7Vaq3IgYrLTiObO8NpSkRbLXoK-0-261003d15f1f66fb389334e51f116989)
在Python中,等号(=)是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026004.jpg?sign=1739596987-1WkxmXZ8Gdr6PxFPrOiqVedyMQKQFQ8R-0-d892900edccd6b52d0d9e8f53c30dea4)
Python语言采用基于值的内存管理方式,不同的值分配不同的内存空间。可理解为,Python变量并不是某一个固定内存单元的标识,而是对内存中存储的某个数据的引用,这个引用是可以动态改变的。
这种变量本身类型不固定的语言称为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值时类型不匹配,就会报错。例如,C语言是静态语言,赋值语句如下(//表示注释):
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026005.jpg?sign=1739596987-5EGeJ6QBm1oE3HvlgaZ4SiiNST5W5DM4-0-42f985446e448fac71e996f5d3cb76b4)
同静态语言相比,动态语言更灵活,就是这个原因。
不要把赋值语句的等号等同于数学的等号。例如下面的代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027001.jpg?sign=1739596987-UokjWhMMBPnnvqQ5vBgeZ7zwnR5ARbYB-0-e624d79f8bf87e5a9d5025e2c11c4147)
如果从数学上理解x = x+2无论如何是不成立的。在程序中,赋值语句先计算右侧的表达式x+2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12。
理解变量在计算机内存中的表示也非常重要。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027002.jpg?sign=1739596987-HDD3mf247OnTEPJQ9d1g8HqCEwfnWkbP-0-85efc0a59ffdb2d7dc34ebb777ff9584)
Python解释器做了两件事情:
(1)在内存中创建了一个'ABC'的字符串。
(2)在内存中创建了一个名为a的变量,并把它指向'ABC',如图2-1所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027003.jpg?sign=1739596987-EfhnM4BIc0UPiIF6JBW83td6TMMWIkri-0-9d512693cea674ae69543691683e357a)
图2-1 a变量指向'ABC'
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据。例如下面的代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027004.jpg?sign=1739596987-w4wLwDEJxAmCKCkbkxttp9zdTc7wQomR-0-5e9864a535461e7a9ffe5c4a0839e879)
最后一行打印出变量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=1739596987-LFmByLfsjjvcO3m8c0150UuELzVSFUkP-0-3033f538596fa21d4cead5012e03c5e5)
图2-2 a、b变量都指向'ABC'
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027006.jpg?sign=1739596987-zurHjM3tlZnyeS05M0ecznyxoI5tjn4h-0-5ebf5789422eb37f98cb1b56e92d2199)
图2-3 a变量指向'XYZ'
所以,最后打印变量b的结果自然是'ABC'。
内置的type()函数可以用来查询变量的数据类型。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027007.jpg?sign=1739596987-ZNhAqlpJ9ZizfzQSx4QNoGfwsDelqudm-0-e425ac8271ea6e01928fe578c558c23b)
当变量不再需要时,Python会自动回收内存空间,也可以使用del语句删除一些变量。
del语句的语法:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027008.jpg?sign=1739596987-1RX7BFPB4wTl1rjsev41Ser9TRT8IqwP-0-9e4b8264fc8abc3d6d612b23f1a5cced)
可以通过使用del语句删除单个或多个变量对象。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027009.jpg?sign=1739596987-7nsI4NZwTyq36wVrPXlET6gw646rj21s-0-2379580e3ae80725980929a2ee821ed4)
2.2.2 常量
所谓常量就是不能变的变量,例如,常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00028002.jpg?sign=1739596987-0cNNFIIyqGE6AeIDKqh3Hh1mWagEpq8m-0-2269b7cf40a266a3cf514816d9a48432)
但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变。所以,用全部大写的变量名表示常量只是一个习惯上的用法,实际上可以改变变量PI的值。