1.引用【了解】
- 定义变量的时候, 变量和数据 都会在内存开辟空间
- 变量所对应的内存空间中存储的是 数据所在内存的地址 (平时理解为 将数据存储到变量中即可)
- 变量中保存数据的地址,就称为是引用
- Python 中所有数据的传递,传递的都是引用(即地址)
- 赋值运算符(=), 会改变变量的引用, 即只有 = 可以修改变量的引用
- 可以使用 id(变量) 函数,查看变量的引用
2.可变类型与不可变类型【记住】
根据内存中的数据是否允许修改,将数据类型分为可变类型与不可变类型
简单理解: 不使用等号,能不能修改数据值。
如果不使用等号,可以修改,则是可变的;
如果只能使用等号就可以修改的话,则是不可变的
可变类型: 可以修改
- 列表(list) list.append()
- 字典(dict ) dict.pop()
- 集合(set)
不可变类型: 不允许修改
- 数字类型(int , float , bool)
- 字符串(str)
- 元组(tuple)
注意:如下图,元组为什么能改变数据,因为下图中改变的是列表的数据
3.局部变量和全局变量
根据变量定义的位置将变量分为局部变量和全局变量
(1)局部变量
1, 在函数内部定义的变量,称为是局部变量
2, 特点
- - 2.1 局部变量,只能在当前函数内部使用
- - 2.2 可以在不同函数内定义名字相同的局部变量
3, 生命周期(使用范围)
- - 3.1 在函数执行(调用)的时候被创建
- - 3.2 函数执行结束被销毁(删除)
4, 形参可以认为是局部变量
5, 如果想要在函数外部使用局部变量的值, 使用 return 返回
def func1():num = 10 # 局部变量print(num)def func2():num = 20print(num)if __name__ == '__main__':func1() # 10func2() # 20func1() # 10
(2)全局变量
1, 在函数外部定义的变量
2, 特点
- - 2.1 全局变量 可以在任意函数内访问(读取)
- - 2.2 想要在函数内部修改全局变量的引用,需要使用 global 关键字声明(使用 global 关键字可以声明为全局变 量)
- - 2.3 如果在函数内部出现和全局变量名字相同的局部变量,在函数内部使用的是局部变量
3, 生命周期
- - 代码执行的时候 创建, 执行结束销毁
# 定义全局变量
g_num = 10def func_1():print(g_num) # 使用全局变量def func_2():g_num = 20 # 定义局部变量print(g_num)def func_3():global g_num # 声明为全局变量g_num = 30print(g_num)
if __name__ == '__main__':print(g_num) # 10func_1() # 10func_2() # 20func_1() # 10print(g_num) # 10func_3() # 30 修改了全局变量, 将全局变量的值改为30 了func_1() # 30g_num = 100func_1() # 100 修改全局变量的值func_2() # 20 局部变量func_3() # 30func_1() # 30
def func1():list1.append(10)def func2():list1 = [1, 1] # 定义局部变量, 不影响全局变量list1.append(0)def func3():global list1 # 全局变量list1.pop() # 删除最后一个数据def func_5():list1.pop() # 用的全局变量,没有改引用def func4():global list1 # 全局变量list1 = [1]if __name__ == '__main__':list1 = [1, 2]func1()print(list1) # ①[1, 2] ②[1, 2, 10](√) ③报错func2()print(list1) # ① [1, 1, 0] ②[1, 2, 10](√) ③报错func3()print(list1) # [1, 2]# func_5()# print(list1) # ②[1, 2] ①[1]对func4()print(list1) # [1]
未完待续。。。