Python变量的定义和使用(小白必读)
在 Python 中,变量严格意义上应该称为“名字”,也可以理解为标签。
程序中,当把一个值赋给一个名字时,比如把值“不忘初心”赋给 strslogan,strslogan 就称为变量。在大多数编程语言中,都称之为“把值存储在变量中”。意思是在计算机内存中的某个位置,程序执行时字符串序列“不忘初心”已经存在于计算机的内存。不需要知道它们到底在哪里,只需要告诉 Python 的编译器,字符串序列的名字是 strslogan,然后就可以通过这个名字来引用这个字符串序列了。
注意,变量的命名并不是任意的,应遵循以下规则:
为变量赋值可以通过等号(=)来实现,其语法格式为:
这样创建的变量就是数值型的变量。如果直接为变量赋值一个字符串值,那么该变量即为字符串类型。例如下面的语句:
在 Python 中,允许同时为多个变量赋值,比如:
还可以为多个对象指定多个变量,比如:
1、标识用于唯一地表示一个对象,通常对应对象在计算机内存中的位置,换句话说变量是存放变量位置的标识符。使用内置函数 id(obj)可以返回对象 obj 的标识。变量赋值对于内存的使用情况如下:
1) 变量 fruit_01 赋值“苹果”,代码如下:
图 1 变量赋值内存分配情况
2) 变量 fruit_01 赋值“苹果”,变量 fruit_02 赋值“香蕉”,代码如下:
图 2 变量赋值内存分配情况
3) 变量 fruit_01 赋值“苹果”,变量 fruit_02 的值等于 fruit_01,代码如下:
图 3 变量赋值内存分配情况
2、类型用于标识对象所属的数据类型(类),数据类型用于限定对象的取值范围以及允许执行的处理操作。使用内置函数type(obj)可以返回对象obj所属的数据类型。
3、值用于表示对象的数据类型的值。使用内置函数print(obj)可以返回对象obj的值。
Python 是一种动态类型的语言,也就是说,变量的类型可以随时变化。在 Python 语言中,使用内置函数 type 可以返回变量类型。
【实例】使用内置函数 type、id 和 print 查看对象。
Python 也是一种强类型语言,每个变量指向的对象均属于某个数据类型,即支持该类型运行的操作运算。当允许多个变量指向同一个值,使用内置函数 id 可以返回变量所指的内存地址。例如,将两个变量都赋值为数字 2048,再分别应用内置函数 id 获取变量的内存地址,将得到相同的结果。
【实例】两个变量赋同样的值,验证指向的地址。
变量是否存在,取决于变量是否占据一定的内存空间。当定义变量时,操作系统将内存空间分配给变量,该变量就存在了。当使用del命令删除变量后,操作系统释放了变量的内存空间,该变量也就不存在了。
当对象绑定给变量时,计数增加 1,当变量解除绑定时,计数减少 1。待计数为 0 时,对象自动释放。Python 具有垃圾回收机制,当一个对象的内存空间不再使用(引用计数为 0)后,这个内存空间就会被自动释放。所以 Python 不会像 C 那样发生内存泄漏而导致内存不足甚至系统死机的现象。Python 的垃圾空间回收是系统自动完成的,而 del 命令相当于程序主动地进行空间释放,将其归还给操作系统。
图 4 变量引用的逻辑示意图
通过上图可以看出,变量把对象和自己连接起来(指针连接对象空间),建立了变量和对象之间的映射关系,这就是引用。
引用完成,就实现了赋值。变量是到内存空间的一个指针;对象是一块内存空间,内存空间里存储对象所表示的值;引用是自动形成的从变量到对象的映射关系(指针)。
例如,变量 x 先被赋值为 1,然后又被赋值为 1.5 之后的逻辑如下图所示。
图 5 变量修改赋值的逻辑示意图
由上图中可见,并不是 x 的值由 1 变成了 1.5,而是另外开辟了一个地址空间存储对象,让 x 指向它。变量的值并不是直接存储在变量里,而是以“值”对象的形式存储在内存某地址中。可以说变量指向那个“值”对象。
因此,Python 变量里存放的实际是“值”对象的位置信息(内存地址)。这种通过地址间接访问对象数据的方式,称为引用。
使用 id 函数可以确切地知道变量引用的内存地址,使用运算符 is 可以判断两个变量是否引用同一个对象。
【实例】运算符 is 可以判断两个变量是否引用同一个对象。
例如:
程序中,当把一个值赋给一个名字时,比如把值“不忘初心”赋给 strslogan,strslogan 就称为变量。在大多数编程语言中,都称之为“把值存储在变量中”。意思是在计算机内存中的某个位置,程序执行时字符串序列“不忘初心”已经存在于计算机的内存。不需要知道它们到底在哪里,只需要告诉 Python 的编译器,字符串序列的名字是 strslogan,然后就可以通过这个名字来引用这个字符串序列了。
变量的定义
在 Python 中,不需要先声明变量名及其类型,直接赋值即可创建各种类型的变量。注意,变量的命名并不是任意的,应遵循以下规则:
- 变量名必须是一个有效的标识符;
- 变量名不能使用 Python 中的保留字;
- 慎用小写字母 l 和大写字母 O;
- 应选择有意义的单词作为变量名,即见名知意。
为变量赋值可以通过等号(=)来实现,其语法格式为:
变量名 = 变量值例如:
myvalue = 123变量必须定义之后才能访问。Python 中的变量比较灵活,同一个变量名称可以先后被赋予不同类型的值,定义为不同的变量对象参与计算。
这样创建的变量就是数值型的变量。如果直接为变量赋值一个字符串值,那么该变量即为字符串类型。例如下面的语句:
myvalue = "C语言中文网"
在 Python 中,允许同时为多个变量赋值,比如:
a=b=c=1表示创建一个整型对象,三个变量被分配到相同的内存空间上。
还可以为多个对象指定多个变量,比如:
a,b,c=11,23,’python’在 Python 语言中,数据表示为对象。对象本质上是一个内存块,拥有特定的值,支持特定类型的运算操作。在 Python 3 中,一切皆为对象。Python 语言中的每个对象由标识(Identity)、类型(Type)和值(Value)标识:
1、标识用于唯一地表示一个对象,通常对应对象在计算机内存中的位置,换句话说变量是存放变量位置的标识符。使用内置函数 id(obj)可以返回对象 obj 的标识。变量赋值对于内存的使用情况如下:
1) 变量 fruit_01 赋值“苹果”,代码如下:
fruit_01 = '苹果'其内存的分配情况如下图所示。
图 1 变量赋值内存分配情况
2) 变量 fruit_01 赋值“苹果”,变量 fruit_02 赋值“香蕉”,代码如下:
fruit_01 = '苹果' fruit_02 = '香蕉'内存的分配情况如下图所示。
图 2 变量赋值内存分配情况
3) 变量 fruit_01 赋值“苹果”,变量 fruit_02 的值等于 fruit_01,代码如下:
fruit_01 = '苹果' fruit_02 = fruit_01其内存的分配情况如下图所示:
图 3 变量赋值内存分配情况
2、类型用于标识对象所属的数据类型(类),数据类型用于限定对象的取值范围以及允许执行的处理操作。使用内置函数type(obj)可以返回对象obj所属的数据类型。
3、值用于表示对象的数据类型的值。使用内置函数print(obj)可以返回对象obj的值。
Python 是一种动态类型的语言,也就是说,变量的类型可以随时变化。在 Python 语言中,使用内置函数 type 可以返回变量类型。
【实例】使用内置函数 type、id 和 print 查看对象。
myvalue = "C语言中文网" print(id(myvalue)) print(type(myvalue)) print(myvalue) myvalue = 123 print(id(myvalue)) print(type(myvalue)) print(myvalue)运行结果为:
57054952
<class 'str'>
C语言中文网
5638176
<class 'int'>
123
Python 也是一种强类型语言,每个变量指向的对象均属于某个数据类型,即支持该类型运行的操作运算。当允许多个变量指向同一个值,使用内置函数 id 可以返回变量所指的内存地址。例如,将两个变量都赋值为数字 2048,再分别应用内置函数 id 获取变量的内存地址,将得到相同的结果。
【实例】两个变量赋同样的值,验证指向的地址。
game=number=2048 print(id(game)) print(id(number))运行结果为:
63115696
63115696
变量的使用
1、删除变量
使用 del 命令可以删除一个对象(包括变量、函数等),删除之后就不能再访问这个对象了,因为它已经不存在了。当然,也可以通过再次赋值重新定义变量。变量是否存在,取决于变量是否占据一定的内存空间。当定义变量时,操作系统将内存空间分配给变量,该变量就存在了。当使用del命令删除变量后,操作系统释放了变量的内存空间,该变量也就不存在了。
当对象绑定给变量时,计数增加 1,当变量解除绑定时,计数减少 1。待计数为 0 时,对象自动释放。Python 具有垃圾回收机制,当一个对象的内存空间不再使用(引用计数为 0)后,这个内存空间就会被自动释放。所以 Python 不会像 C 那样发生内存泄漏而导致内存不足甚至系统死机的现象。Python 的垃圾空间回收是系统自动完成的,而 del 命令相当于程序主动地进行空间释放,将其归还给操作系统。
2、变量的引用
变量本身是通用的。Python 的变量实质是引用,其逻辑如下图所示。Python 的变量都可以看成是对内存中某个对象的引用,即变量指向该内存地址存储的值。图 4 变量引用的逻辑示意图
通过上图可以看出,变量把对象和自己连接起来(指针连接对象空间),建立了变量和对象之间的映射关系,这就是引用。
引用完成,就实现了赋值。变量是到内存空间的一个指针;对象是一块内存空间,内存空间里存储对象所表示的值;引用是自动形成的从变量到对象的映射关系(指针)。
3、变量修改赋值
Python 变量可以通过赋值来修改变量的“值”,但并不是原地址修改。例如,变量 x 先被赋值为 1,然后又被赋值为 1.5 之后的逻辑如下图所示。
图 5 变量修改赋值的逻辑示意图
由上图中可见,并不是 x 的值由 1 变成了 1.5,而是另外开辟了一个地址空间存储对象,让 x 指向它。变量的值并不是直接存储在变量里,而是以“值”对象的形式存储在内存某地址中。可以说变量指向那个“值”对象。
因此,Python 变量里存放的实际是“值”对象的位置信息(内存地址)。这种通过地址间接访问对象数据的方式,称为引用。
使用 id 函数可以确切地知道变量引用的内存地址,使用运算符 is 可以判断两个变量是否引用同一个对象。
【实例】运算符 is 可以判断两个变量是否引用同一个对象。
a = 3 b = 3 print(a is b) str1 = 'hello' str2 = 'hello' print(str1 is str2)运行结果为:
True
True
4、变量值的比较和引用判断
在 Python 语言中,通过“==”运算符可以判断两个变量指向的对象值是否相同;通过“is”运算符可以判断两个变量是否指向同一对象。例如:
# 使用 == 运算符比较值 a = 3 b = 3 c = 4 print(a == b) # 输出 True,因为 a 和 b 的值都是 3 print(a == c) # 输出 False,因为 a 的值是 3,而 c 的值是 4 # 使用 is 运算符比较对象的引用 str1 = 'hello' str2 = 'hello' # 由于 Python 会缓存短字符串,str1 和 str2 指向同一个字符串对象 print(str1 is str2) # 输出 True # 对于不可变数据类型(如整数和短字符串),赋值相同的值时,可能会指向同一个对象 x = 1000 y = 1000 print(x is y) # 输出 True,因为 x 和 y 都指向缓存的同一个整数对象 # 但是,如果修改其中一个对象,它们将不再指向同一个对象 z = 1001 print(z is y) # 输出 False,因为 z 是一个新的对象运行结果为:
True
False
True
True
False