1、python变量
1、Python变量
-
变量的定义:
- 可以看成一个小箱子,专门用来“盛装”程序中的数据。每个变量都拥有独一无二的名字,通过变量的名字就能找到变量中的数据。
2.变量的赋值
Python 使用等号=作为赋值运算符,具体格式如下:
name = value
#name为变量名 =为赋值符号 value为变量值
3.变量的引用
- 变量 和 数据 都是保存在 内存 中的
- 在
Python中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的
3.1 引用的概念
在Python中:
- 变量与数据分开存储
- 数据保存在内存的某个位置
- 变量中存放的是数据在内存中的地址
- 变量中存放数据的内存地址,就是引用
- 使用id()可以查看变量中保存的数据的内存地址。
#关于变量的多次赋值(不可变类型) a = 1 a = 2
'''首先:a = 1 ,在内存中为1开辟一个空间,将1存进去,a中保存着1的内存地址
然后 a = 2,在内存中为2开辟一个空间,将2存进去,a中保存着2的内存地址
总结:在python中队同一个变量的多次赋值,并不是在同一个内存空间中刷新其中存放的值,而是将变量中存放的地址进行更新,使其指向不同的地址空间(数据)。'''
#变量引用的例子
a = 1
b = 2
c = a #将存在a中的地址赋值给c,现在c也指向了值为1的内存地址
id(a)
id(c)#使用id()查看变量中存放的内存地址 与a一致

3.2 ==和is
- ==用来比较变量所指向的内存中的值是否相等
- is用于判断两个变量引用对象(存放的对象的值)是否为同一个,对象就是=右边那个值,is比较的是两个变量中存放的内存地址是否相同。
#==和is的区别 a = [1, 2, 3] b = a b == a #True b is a #True
c = a[:] #复制列表,在内存中另外存放这段被复制的值,将c指向它 b is a #false b == a #true
#为什么相同的值内存地址不同呢?
3.3 函数的参数和返回值的传递
在 Python 中,函数的 实参/返回值 都是是靠 引用 来传递来的
#Python中函数参数是引用传递(注意不是值传递)
def test(num): print("-" * 50) print("%d 在函数内的内存地址是 %x" % (num, id(num))) result = 100 print("返回值 %d 在内存中的地址是 %x" % (result, id(result))) print("-" * 50) return result a = 10 print("调用函数前 内存地址是 %x" % id(a)) r = test(a) print("调用函数后 实参内存地址是 %x" % id(a)) print("调用函数后 返回值内存地址是 %x" % id(r))
4.变量的可变类型和不可变类型
- 不可变:内存中存放的数据不允许被修改
- 数据类型:
int,bool,float,complex - 字符串:str (用单引号或者双引号包含字符串)
- 元组:tuple(用()包含元组)
- 数据类型:
- 可变:内存中的数据可以被改变
- 列表:list(用[]包含)
- 字典:dict(用{}包含)
- 集合:set(可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。)
- 总结:
- 可变类型:变量在第一次被定义的时候就固定分配了内存地址,变量中的内存地址不会随着值的改变而改变。
- 不可变类型:给同一个变量多次赋值,变量中的地址会随着值的改变指向新的内存地址。
#不可变类型 x = 18 id(x) prinnt(x) #值为18 x += x #值为19 id(x) #id改变 print(x) #值为19
#可变类型 y = [1,2,3] id(y) print(y) y.append(4) id(y) #内存地址不变 print(y)#值改变
5.小整数池
python中经经常使用的一些数值定义为小整数池,小整数池的范围是[-5,256],python对这些数值已经提前创建好了内存空间,即使多次重新定义也不会在重新开辟新的空间,但是小整数池外的数值在重新定义时都会再次开辟新的空间。
小整数池目的:节省内存,提高执行效率。
需要注意的是:Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被垃圾回收机制回收。

a=5 b=5 a is b #True a=1000 b=1000 a is b #False
浙公网安备 33010602011771号