python学习之引用和复制
python学习之引用和复制
a=b
对于数字和字符串这样的不可变对象,像a=b这样的赋值,就会创建一个对b的引用,实际上创建的是b的一个副本,但是如果是列表字典等可变的对象,,这种引用行为会截然不同
a=[1,2,3,4]
b=a
b is a #print True
b[2]=-100 #修改b中的一个元素
print a #a中的也已经改变,a[2]=-100
处理方式:浅复制和深复制
浅复制指的是将创建一个新对象,但是它包含对原始对象的引用,例如:
a=[1,2,[3,4]]
b=list(a) #创建a的一个浅复制
b is a #print False
b.append(100) #给b追加一个元素
print b #b的输出为[1,2,[3,4],100]
print a #此时a的输出为[1,2,[3,4]]
b[0]=3 #此时修改b中第一个元素,这个元素是对原始元素a的引用
print a #此时a的值会改变,a[0]=3
如果要完全将a和b元素隔离,形成两个新的元素,可以使用copy包里面的deepcopy方法,此时就是深复制
import copy
a=[1,2,[3,4]]
b=copy.deepcopy(a)
b[0]=3
print a #此时a的值没有任何变化,还是[1,2,[3,4]]
浙公网安备 33010602011771号