8.1-什么是变量:
如果,我们想把数据存到内存里,以便在程序中多次使用,就需要通过变量来存储数据,然后在需要的时候通过变量的名字来提取数据。
变量就是编程中最基本的存储单位,会暂时的储存你放进去的东西(即代指内存里某个地址中保存的内容)。
在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
在python中我们可以把各种类型的数据赋值给同一个变量,比如:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#s1 存储的内容为字符串"hello world"
s1 = "hello world"
print(type(s1))
print(s1)
print("-----" * 8)
#s1 存储的内容变为整形 123
s1 = 123
print(type(s1))
print(s1)
运行结果:
Python能自由改变变量类型的特征被称为动态类型。并不是所有的语言都支持动态类型。在静态类型的语言中,变量有事先说明好的类型。特定类型的数据必须存入特定类型的变量。相比于静态类型,动态类型显得更加灵活便利。
8.2-变量的命名规范:
- 变量名只能是是大小写英文字母、数字和_组成。
- 不能用数字开头。
- 以下关键字(python内部的关键字)不能声明为变量名。
['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']
在 Python3 中, exec 不再是关键字,但 nonlocal 是一个新的关键字。
注:变量对大小写敏感
8.3-变量赋值:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
user = "root"
pwd = "root123"
user = "root"的过程:python解释器会在内存中创建一个"root"字符串,将"root"存储在一个内存空间里,然后user变量指向存储"root"字符串的内存地址。
在内存中的表示:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
user = "root"
#将变量pwd指向了user变量所指向的地址
pwd = user
在内存中的表示:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
user = "root"
#将变量pwd指向了user变量所指向的地址
pwd = user
#将变量user的指向改为"root123",但变量pwd并没有改变
user = "root123"
在内存中的表示:
8.4-垃圾回收机制:
在Python基础中还有一个比较重要的概念就是垃圾回收机制,下面我们通过代码来验证:
>>> a = 1
>>> b = a
>>> id(a),id(b)
(1731718960, 1731718960)
首先我们声明了一个变量a,a等于1,然后又声明了变量b,b等于a,其实就是变量b指向了a所指向的内存地址, 通过id()内置函数我们可以清楚地看到这两个变量指向的是同一块内存区域。
再继续下列实例代码:
>>> name = "root"
>>> name = "root123"
>>> name
'root123'
通过上面这个实例,可以清楚的理解到垃圾回收机制是如何工作的:
- 创建一个变量 name ,指向 "root" 的内存地址;
- 如果 "root" 这个值之前没有在内存中创建,那么现在创建它,并让这个内存地址的引用数+1,此时等于1;
- 然后对变量 name 重新赋值,让其指向 "root123" 的内存地址;
- 那么此时 "root" 值的引用数现在变成了0,当python一旦检测到某个内存地址的引用数等于0时,就会把这个内存地址给删掉,从而释放内存;
- 最后变量 name 指向了 "root123" 的内存地址,所以 name 就等于 "root123"。