目录
- 1、变量与常量
- 2、如何使用变量?
- 3、定义变量
- 3.1、定义一个变量
- 3.2、同时定义多个变量
- 4、变量名的命名规则
- 5、变量值
- 5.1、变量值的三个特征
- 5.2、变量值的比较
- 5.2.**、小整数池
1、变量与常量
在编写程序时,表示数据的量可以分为两种:常量和变量。
- 常量,是指在程序运行过程中值不能发生改变的量,如一些具体的值:1、3.5、3+4j、“abc”等。
- 变量,是指在程序运行过程中值可以发生改变的量。比如人的年龄,游戏角色的等级、金钱等;Python中的每一个变量都需要指定一个名字,如:name、x、test等。
tip:Python语法中没有常量的概念,无法定义常量。但是在Python中约定,当一个变量名中的所有字母都大写时,代表这是一个常量。
2、如何使用变量?
使用规则是:先定义,后引用。
>>> name = 'python' #定义
>>> name #引用
'python'
那么在定义和引用的过程中,我们的计算机发生了什么变化呢?
- 定义的过程中,首先在内存中开辟一块空间,用于存储数据,就相当于你在宾馆中开了一间房;然后将存储该数据的内存地址保存在变量名中,就相当于宾馆的房间号。
- name就是变量名,相当于房间号;‘python’就是房间中所存储的值
- 引用的过程,即顺着变量所保存的内存地址去寻找该内存地址中所存储的值,通俗一点就是拿着房间号去找房间。
3、定义变量
3.1、定义一个变量
Python是一种弱类型语言,变量的类型由其值的类型决定。变量在使用前不需要先定义,为一个变量赋值后,则该变量会自动创建。
语法:变量名 = 变量值
如:name = 'python'
3.2、同时定义多个变量
在一条语句中可以同时定义多个变量。
语法:变量1,变量2,…,变量n = 值1,值2,…,值n
>>> name, age = '张三', 18
>>> name
'张三'
>>> age
18
对于已定义的变量,也可以在一条语句中修改多个变量的值。
>>> x, y = 5, 10
>>> x, y
(5, 10)
>>> x, y = y, x
>>> x, y
(10, 5)
4、变量名的命名规则
- 变量名可以包括字母、数字和下划线,但是数字不能作为开头字符。
- 系统关键字不能作为变量名。例如,and、break 等是系统关键字,不能作为变量名使用。
- Python 的变量名区分大小写。例如,test 和 Test 是两个不同的变量名。
5、变量值
5.1、变量值的三个特征
即 id,type 和 value。
- id:反映的是变量值的内存地址,是根据内存地址计算出来的一个号码,即内存的一种映射。内存地址不同,id则不同。
- type:即变量值的类型:整型、浮点型等。
- value:值本身。
# 查看一个变量名的id 和 type。
>>> name = '张三'
>>> id(name)
46061760
>>> type(name)
<class 'str'>
5.2、变量值的比较
使用 is 或 == 进行变量值的比较。
- is:比较左右两个变量身份(id)是否相等。
- ==:比较左右两个变量值本身(value)是否相等。
# 值一样的两个变量,其id也有可能是不一样的
>>> x = 'info: shm: 18'
>>> y = 'info: shm: 18'
>>> x is y
False
>>> x == y
True
>>> id(x), id(y)
(44256096, 46059456)
内存分析
- 首先在内存中开辟一块空间,用以存储值 ‘info: shm: 18’,并把其内存地址保存在x中;
- 接着再在内存中开辟一块空间,用以存储相同的值值 ‘info: shm: 18’,并把其内存地址保存在y中;
- 这就相当于内存中被开辟了两块内存空间,而id 是内存地址的一种映射,当然x 与 y 的id 就不一样了。
5.2.**、小整数池
根据上面介绍的内容,首先来观察一个神奇的现象。
>>> x = 100
>>> y = 100
>>> x is y
True
>>> x == y
True
这种情况似乎和我们上面所分析的内存状态不符。下面呢,让我们来了解一下小整数池。
介绍: 小整数池是Python自带的一个优化,从 Python 解释器启动的那一刻开始,就会在内存中事先申请好一系列内存空间,用以存放常用的整数[-5, 256]。
即,在上述例子中,代码还没有运行到x = 100时,100就已经存在于内存空间中,当代码运行到x =100时,只是把100 的内存地址保存在了x中;同理,y也一样。不仅如此,之后凡是值为100的变量,其id都是同一个。
>>> x = 100
>>> y = 100
>>> id(x)
2070047456
>>> id(y)
2070047456
>>> res = 96 + 4
>>> id(res)
2070047456
其实在一些简单的字符串中也会存在这种现象,同样也是Python自带的一种优化。
注意: 使用pycharm 时,小整数池的范围会扩大,这并不代表Python的特性,只是pycharm的一种优化。