大家在刚接触或平时使用python的时候,可能都会出现类似如下的情况:
a = [1, 2] b=a print('改变b前,a的值:',a) b[0] = 2 print('改变b后,a的值:',a) print('b:', b) --------输出结果------------- 改变b前,a的值: [1, 2] 改变b后,a的值: [2, 2] # 没有改变a,a不应该等于[1,2]吗? 为什么等于[2,2]了 b: [2, 2]
为什么我只给b赋值,但a却被改变了?
a不应该等于[1,2]吗!!!
这里就需要了解python中可变类型和不可变类型的区别了
在上述代码中,虽然a的值赋值给了b,但由于a是一个可变类型,赋予b的值实际上是a的内存地址,这个时候b和a共用一个内存地址,在改变b值的操作后,由于内存地址未发生变化,所以a的值也相当于被改变了。
python中可变类型有三种:list, dict,set
那如何让改变b的时候,不改变a呢?
可以使用深拷贝:
import copy a = [1, 2] b = copy.copy(a) # 深拷贝a print('改变b前,a的值:', a) b[0] = 2 print('改变b后,a的值:', a) print('b:', b) --------输出结果------------- 改变b前,a的值: [1, 2] 改变b后,a的值: [1, 2] b: [2, 2]
如果是不可变类型(string,int,float,tuple),则不会出现上述情况
b = a = 2 print('改变b前,a的值:', a) b = 1 print('改变b后,a的值:', a) print('b:', b) --------输出结果------------- 改变b前,a的值: 2 改变b后,a的值: 2 b: 1