变量和数据都是保存在内存中的; 在python中函数的参数传递以及返回值都是引用传递的; 变量和数据是分开存储的; 变量中记录数据的地址,就叫做引用; 使用id()函数可以查看变量中保存的数据所在的内存地址; 注意: 如果变量已经被定义,当给一个变量复制的时候,本质上是修改了数据的引用。① 变量不再对之前的数据引用;②变量改为对新复制的数据引用; 可变类型和不可变类型 不可变类型: 内存中的数据不允许修改:
① 数字类型: int、bool、 float、complex、long ② 字符串 :str ③ 元组 :tuple
可变类型: 内存中的数据可以被修改
① 列表 list ② 字典 dict
可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a; 不可变类型: 变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。 函数参数传递时注意:
不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响; 局部变量和全局变量 局部变量:函数内部定义的变量,只能在函数内部使用; 全局变量: 函数外部定义的变量,所有函数内部都可以使用这个变量;(不推荐使用)
注意: 在python中,不允许修改全局变量的值,如果修改,会在函数中定义一个局部变量;
num = 10
# python中,不允许修改全局变量
def method1(): num = 99 # 这里没有修改全局变量num,而是自己又定义了一个局部变量,执行完这个函数,局部变量就会回收 print(num)
def method2(): print(num) # 虽然在method1中修改了 num 但是却不会修改
method1() method2()
# 输出 # 99 # 10
可以使用global关键字修改全局变量的值。 全局变量的命名规则: 前面加上g_ 或者gl_;