a=1,其中 a 就是变量名称,1 就是它的值。在程序运行过程当中,变量的值通常都会发生改变,内存中会专门开辟一段空间,用来存放变量的值,而变量名将指向这个值所在的内存空间。与变量相对的就是常量,在程序运行过程当中,常量的值不会发生改变。java
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
变量的命名方式通常有2种:
1)变量中单词与单词之间使用下划线分隔python
hello_kitty='abc'
2)变量中的每一个单词的首字母大写数组
helloKitty='abc'
Tip:推荐使用第一种方式~缓存
a=1,就是一个变量的赋值过程,等号“=”左边的值赋值给右边的变量a,这个过程已经包含了变量的申明和定义过程,每一个变量须要先赋值再使用,变量在被赋值以后才会被建立。不一样于其余语言,例如在C语言中,变量在被赋值前,必须先定义变量的类型,而Python不须要,能够不定义变量的类型直接赋值,Python解释器会根据语法和操做数决定对象的类型。ide
String str = "abc"; char sex = 'M';
>>> str = 'abc' >>> var = 1
在python中,能够对同一个变量反复赋值,且每次赋值的数据类型都不一致(type()函数查看数据类型):函数
>>> abc = 1 >>> type(abc) <class 'int'> # abc 为 int 类型 >>> abc = 1.2 >>> type(abc) <class 'float'> # abc为 float 类型 >>> abc = 'hello' >>> type(abc) <class 'str'> # abc为 字符串 类型
内存图解:编码
程序中的一个赋值操做,例如:abc=1,在内存中大体能够分为两个步骤:
1)内存中开辟一段空间用于存放值 1
2)内存中建立一个变量abc,并指向 值 1code
赋值完成后,若修改 abc 的值,python解释器并非修改变量abc指向的内存空间中存放的值,而是从新开辟一段内存空间,将新的值存放进去,变量abc从新指向这段新开辟的内存空间:对象
>>> abc = 1 >>> id(abc) 1465150944 >>> abc='hello kitty' >>> id(abc) 1730859168688
注:函数id()用于查看变量的内存地址~blog
示例1:
>>> a = 10 >>> b = 10 >>> id(a) 1465151232 >>> id(b) 1465151232
示例2:
>>> a = 300 >>> b = 300 >>> id(a) 1730858159920 >>> id(b) 1730858412880
如上面所说,在Python中修改变量的值并非在对应的内存空间中直接修改,而是须要malloc从新分配内存,用完以后再回收。为了提升效率,Python解释器将小整数[-5,257)存放在小整数对象池中,即small_ints数组中。small_ints缓存了[-5,257) 之间的全部整数,且在python解释器初始化后small_ints数组就一直存在。若变量的值在[-5,257)范围内,就直接从small_ints数组中获取,而不须要再分配内存空间。
小整数的范围为[-5,257),若要修改须要经过修改python的源代码实现
因此如 示例1 中所示:不一样的变量,它们的值是同一个小整数时,这些变量引用的是同一个对象。若整数的值不在[-5,257) 范围内,python解释器会将其存放在PyIntBlock中,这里不作介绍~
多重赋值
同时为多个变量赋值,也称链式赋值。
a = b = c = 1 # a,b,c的值都为1
多元赋值
多个变量,多个值,逐一对应。
a, b, c = 1, 2, 3 # a = 1,b = 2,c = 3
对换赋值
x=1; y=2 x, y = y, x # x = 2, y = 1
分解赋值
元组分解后赋值给多个变量
a, b, c = (1,2,3) # a = 1,b = 2,c = 3 s='hello' a,b,c,d,e=s # a = 'h',b = 'e',c = 'l',d = 'l',e = 'o' a,_,_,_,e=s # a = 'h',e = 'o',只取出开头结尾,单个下划线仅仅是一个有效的变量名称,来表示某个变量是临时的或可有可无的(把不须要的值赋值给下划线) # 也能够按下列方式书写: a,*_,e=s print(a,e) # a = 'h',e = 'o'
增量赋值
x += 1
Python使用引用计数来追踪内存中的对象。当对象被建立并赋值给变量时,该对象的引用计数被设置为1。
当对象再次被引用时,引用计数加1。引用计数也会减小(例如del 变量名或对变量从新赋值等),当引用计数为0是,意味着这个对象已经没有被使用~
del语句
del语句会删除对象的一个引用,del语法:del obj[, obj2[, ...objN]]
执行del x
后的两个动做:
1)从如今的名称空间中删除x
2)x所指向的对象的引用计数减1
Python的GC模块经过引用计数来跟踪和回收垃圾。在引用计数的基础上,还能够经过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题。经过“分代回收”(generation collection)以空间换取时间来进一步提升垃圾回收的效率。
常量指在程序运行过程当中不会改变的量,c语言中有专门的常量定义语法:const int a = 60; 常量定义以后就不能更改,若更改就会报错,Python中没有相似const这样的修饰符,即没有专门用于定义常量的语法,通常约定俗成 变量名以全大写的形式来表示这是一个常量~
NAME=kitty
.................^_^