python的浅拷贝与深拷贝的区别

一、赋值

alist = ["a","b","c",[5,6],10]
aa = alist
alist.append("yu")
aa.append("iop")
alist[3].append(99)
alist[3].append("test")
print(alist)
print(aa)

执行结果如下:

['a', 'b', 'c', [5, 6, 99, 'test'], 10, 'yu', 'iop']
['a', 'b', 'c', [5, 6, 99, 'test'], 10, 'yu', 'iop']

赋值说明是2个变量之间数据的互相传递,修改任何一变量的值,都会对另一变量值进行影响

二、浅拷贝,copy()

import copy

#浅拷贝,没有拷贝元素中的内部元素,内部元素有改变就会相互影响

blist = ["a","b","c",[5,6],10]
bb = copy.copy(blist)
blist.append("haha")
bb.append(89)

blist[3].append("qe")
bb[3].append(99)

print(blist)
print(bb)

执行结果:

[90, 'b', 'c', [5, 6, 'qe', 99], 10, 'haha']#blist追加的‘haha’,并没有在bb的值中,对内部元素blist[3]添加‘qe’,会作用到bb的bb[3]内部元素中
['a', 'b', 'c', [5, 6, 'qe', 99], 10, 89]#bb追加的89,并没有在blist的值中,对内部元素bb[3]添99,会作用到blist的blist[3]内部元素中

三、深拷贝

import copy

#深拷贝,拷贝后,各元素进行改变互不影响,包括子元素
clist = ["a","b","c",[5,6],10]
cc = copy.deepcopy(clist)
clist.append(90)
cc.append(100)

clist[3].append(11)
cc[3].append(10)

print(clist)
print(cc)

执行结果:

['a', 'b', 'c', [5, 6, 11], 10, 90]
['a', 'b', 'c', [5, 6, 10], 10, 100]

深拷贝其实就是内、外元素全部被拷贝,深拷贝后,2个变量的值改变,不会相互影响

猜你喜欢

转载自www.cnblogs.com/banxiade/p/12470241.html
今日推荐