【python】变量进阶
一、变量的引用
1. 引用的概念
在 python 中,变量与数据是分开存储的,数据保存在内存中的一个位置,变量中保存着数据在内存中的地址,即变量中是记录着数据的地址。
如果变量已经被定义,当给变量赋值时,本质上时修改了数据的引用地址。
2. 函数的参数和传递返回值
在 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)) 调用函数前 内存地址是 a67be0 -------------------------------------------------- 10 在函数内的内存地址是 a67be0 返回值 100 在内存中的地址是 a68720 -------------------------------------------------- 调用函数后 实参内存地址是 a67be0 调用函数后 返回值内存地址是 a68720
二、 可变类型和不可变类型
- 不可变类型,内存中的数据不允许修改
- 数字型 int, bool, float, complex, long(2.x)
- 字符串 str
- 元组 tuple
- 可变类型
- 列表 list
- 字典 dict
- 字典的 key 只能使用不可变类型
可变类型和不可变类型 = 和 += 的区别:
- 可变类型
- + 表示连接操作,如 a = a + b 是创建一个新的对象引用 a 这个对象,等式左侧 a 和右侧 a 引用的内存地址不同
- += 表示追加,本质上是调用 extend 方法,如 a += b, a 引用的内存地址相同
- 不可变类型
- + 和 += 一样
可变类型数据的变化,实际上是通过 方法 来实现的。