![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=1738879579-QfEbqcWPFLZZAmEzsfaem1SqqqLAS0dT-0-be2fe5dceb2d029fa9395dd4557ad90b)
在Python中,等号(=)是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026004.jpg?sign=1738879579-8PH3HoAJOOfqXbZbK8rb8UTP2ihh7oR5-0-30299066af120e3856943a1a5cc8b5ef)
Python语言采用基于值的内存管理方式,不同的值分配不同的内存空间。可理解为,Python变量并不是某一个固定内存单元的标识,而是对内存中存储的某个数据的引用,这个引用是可以动态改变的。
这种变量本身类型不固定的语言称为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值时类型不匹配,就会报错。例如,C语言是静态语言,赋值语句如下(//表示注释):
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00026005.jpg?sign=1738879579-oNhe4zMBC5KrXKbY869gZU4ptZ4TFv5u-0-cdcd8d1c011c3d9aa61b275181bc64c6)
同静态语言相比,动态语言更灵活,就是这个原因。
不要把赋值语句的等号等同于数学的等号。例如下面的代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027001.jpg?sign=1738879579-o3Hs1EinyUQJZgBthED0NnZqvHLXKHfv-0-941c71697f0b6a145543737aa5ee773a)
如果从数学上理解x = x+2无论如何是不成立的。在程序中,赋值语句先计算右侧的表达式x+2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12。
理解变量在计算机内存中的表示也非常重要。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027002.jpg?sign=1738879579-T94yLz6OokeWHMJHB0R5NgJfLMzmaUiv-0-55b41daa3037715fe3e1f3dafb00e3b5)
Python解释器做了两件事情:
(1)在内存中创建了一个'ABC'的字符串。
(2)在内存中创建了一个名为a的变量,并把它指向'ABC',如图2-1所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027003.jpg?sign=1738879579-lQskyR9dIEgzVqvAJGqlylBfKBfvVYao-0-1c68f794657c4473e21a9f56d8d3928d)
图2-1 a变量指向'ABC'
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据。例如下面的代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027004.jpg?sign=1738879579-1LCpq7UlAm3GqNz5YhceuXNXO5rJ7zva-0-b55027ccd376bdf4ac3db388c2fe9534)
最后一行打印出变量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=1738879579-YPq3vdoA8BGCeOT19z1lYAQg8e4hgrds-0-48b1a884a003c0fd8f8cef53d2c04cb2)
图2-2 a、b变量都指向'ABC'
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027006.jpg?sign=1738879579-ybMzfivxMhq2vkW0xjHPOB1J9E2xnFnl-0-237c7ab91c50e9dcc59f1d0dc7339eaa)
图2-3 a变量指向'XYZ'
所以,最后打印变量b的结果自然是'ABC'。
内置的type()函数可以用来查询变量的数据类型。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027007.jpg?sign=1738879579-D4E81cU7sxR3D8XQRNhL9SpSISEnf29v-0-aa3b765b77bba4631e1e7550d204cd55)
当变量不再需要时,Python会自动回收内存空间,也可以使用del语句删除一些变量。
del语句的语法:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027008.jpg?sign=1738879579-u0DTIDOhFQZBXYsXncqR7Y65aUzVkCB6-0-66ea742ef1153ee8f93c04e67442e395)
可以通过使用del语句删除单个或多个变量对象。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00027009.jpg?sign=1738879579-0hlzZIdgXgMScub22emleKUuTB5mq4DP-0-b19e65a864b89e47f1c1d7a493029d1c)
2.2.2 常量
所谓常量就是不能变的变量,例如,常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00028002.jpg?sign=1738879579-FHv9Oa1fjJvp1VH0QwHSNjE9fSudsWJF-0-9ab4038933683f7226462c8f91b78737)
但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变。所以,用全部大写的变量名表示常量只是一个习惯上的用法,实际上可以改变变量PI的值。