赞
踩
1、注释:
(1)不可变元素的类型有:整数、浮点数、字符串、元组
(2)可变元素的类型有:列表、字典
2、说明:
问题:“=”号的作用是将对象引用与内存中的对象进行绑定,整数既然是“不可变”的,如何改变一个指向整数的变量值呢?
答案:直接在内存中创建一个新的整数值,然后将变量引用与其绑定
3、在可变元素类型中(列表、字典)“x +=1"与"x=x+1"的区别说明:
(3.1)不可变元素的类型,“x +=1"与"x=x+1"作用一样,没有区别
(3.2)可变元素的类型中,“x +=1"与"x=x+1"作用不同,区别如下:
x +=1,表示:修改x自身的值(前提是:x必须是可变对象)
x = x + 1,表示:创建一个新的"同名”对象x,并将x + 1,赋值给新创建的同名变量x(它的含义和y = x + 1相同,只不过这里将y取名为x了),x + 1赋值给新x后,旧x的指向就会被释放
4、程序说明如下:
程序说明1:
print('*************整数,不可变变量***********************') z = x = 1 x +=2 print('z等于:',z) print('\n') z = x = 1 x = x + 2 print('z等于:',z) print('\n') print('*************列表,可变变量***********************') print('\n') z = x = [1,2] #初始,x和z都指向[1,2] x +=[3,4] #修改x自身的值 print('z等于:',z) #x和z,指向相同,当x本身被改变的时候,z因为指向相同,也会被改变 print('\n') z = x = [1,2] #初始,x和z都指向[1,2] x = x + [3,4] #创建新同名变量:x,并将x+1赋值给x(即新x指向x+1,旧x指向释放) print('z等于:',z) #因为不是改变x自身,而是创建一个新的变量x,改变新的变量x,旧的x变量不变,因此z不变
程序说明2:
def myfun(ls = []): ls.append('a') print(ls) print('列表append:') myfun();myfun();myfun() print('\n') def sum(ls = []): ls =ls + ['a'] #创建新变量ls,ls指向:ls+['a'],同名旧变量ls不改变,还是指向None print(ls) print('列表相加:') #执行一次sum(),创建并输出一个新ls,同时不会改变旧ls,因此,每次输出都是['a'] sum();sum();sum() print('\n') def sum(ls = []): ls +=['a'] #ls自身加['a'],因此ls改变了 print(ls) print('列表相加:') #执行一次sum(),ls改变一次,因此会输出:['a']、['a','a']、['a','a','a'] sum();sum();sum() print('\n') y=x=[5] x +=[5] #对x本身加上[5] print('x+=是:',x, 'y是:',y) print('\n') x = x + [5] #创建一个同名的变量x,并将x+[5]赋值给新x print('x+[5]是:',x,'y是:',y)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。