主要内容 #
1. python内置函数:id() #
python内置函数id()用于获取对象的内存地址 内存地址可理解为内存条中,每一个数值的存放位置,这个位置可以用一连串数字表示 语法如下: add = id(object) 参数说明: object:需要获取地址的对象名 add: object的内存地址 功能:获取对象object的内存地址,该地址是个一连串的数字,表示该对象唯一的标识符。 例如:a = 16 b = 'dashima' c = [1, 2, 3] #分别打印对象a,b,c的地址 print(id(a)) #打印对象a的地址 print(id(b)) print(id(c))
2. 不可变类型:布尔型, 整型, 浮点型, 字符串, 元组 #
如果一个变量的内容一旦发生改变,该变量的内存地址(id)也随之发生改变, 那么该变量属于不可变类型。 id的改变,意味着创建了新的内存空间。 不可变类型包括:整型, 浮点型, 字符串, 元组 例如:#布尔型 a = True print('a=True的内存地址',id(a)) a = False print('a=False的内存地址',id(a)) #整型 a = 16 print('a=16的内存地址',id(a)) a = 17 print('a=17的内存地址',id(a)) #浮点型 a = 16.01 print('a=16.01的内存地址',id(a)) a = 16.02 print('a=16.02的内存地址',id(a)) #字符串 a = 'dashima' print("a='dashima'的内存地址",id(a)) a = 'python' print("a='python'的内存地址",id(a)) #元组 a = (1, 2, 3) print('a=(1, 2, 3)的内存地址',id(a)) a = (1, 2, 3, 0) print('a=(1, 2, 3, 0)的内存地址',id(a))
3. 可变类型: 列表, 字典 #
如果一个变量的内容发生了改变,该变量的内存地址(id)依然不变, 那么该变量属于可变类型。 id没有被改变,意味着没有创建新的内存空间。 可变类型包括:列表, 字典 例如:#列表 a = [1, 2, 3] print('a=[1, 2, 3]的内存地址',id(a)) a[1] = 0 print('a=[1, 0, 3]的内存地址',id(a)) #字典 a = {'name':'dashima', 'score':99} print("a={'name':'dashima', 'score':99}的内存地址",id(a)) a['name'] = 'python' print("a={'name':'python', 'score':99}的内存地址",id(a))
4. 全局变量声明:global #
如果在函数中传入的参数为可变类型,那么在函数体内修改该参数,函数体外对应的变量也随之改变 例如:#列表 def change_list(a): a[1] = 0 print('函数体内,列表内容为:',a) print('函数体内,列表id为:', id(a)) list1 = [1, 2, 3] change_list(list1) print('函数体外,列表内容为:',list1) print('函数体外,列表id为:', id(list1))如果在函数中传入的参数为不可变类型,那么在函数体内修改该参数,函数体外对应的变量不会被改变 例如:
#列表 def change_list(a): a = 0 print('函数体内,变量a的内容为:',a) print('函数体内,变量a的id为:', id(a)) a = 5 change_list(a) print('函数体外,变量a的内容为:',a) print('函数体外,变量a的id为:', id(a))如果想在函数体内修改函数体外的不可变类型变量,则必须在函数体内使用global语句。 global的语法如下: global var 参数说明: var表示需要修改的全局变量 例如:
#列表 def F(): global a a = 0 print('函数体内,变量a的内容为:',a) print('函数体内,变量a的id为:', id(a)) a = 5 F() print('函数体外,变量a的内容为:',a) print('函数体外,变量a的id为:', id(a))