Python 深拷贝new=copy.deepcopy(old)、浅拷贝new=old.copy()与非拷贝new_ma=m

发布时间 2023-03-28 10:55:20作者: Aneverforget

new_ma,m=[],[]

new_ma=m。此为非拷贝改变new_ma或ma都会改变另一个数列

 1 w=[]
 2 ma=[1,2]
 3 b=[2,1]
 4 for i in range(2):
 5     w=w+[ma[i]]*b[i]
 6 print(w)
 7 
 8 ma=[1,2]
 9 new_ma=ma#这是非拷贝方法。修改任何一个列表都会影响到另一个。
10 ma.append("new")
11 ma[0]=ma[0]+1
12 new_ma[0]=new_ma[0]+1
13 #赋值后对旧队列操作,影响新列表;对新队列操作影响新队列
14 print(ma,new_ma )
15 
16 ma=[1,2]
17 copy_ma=ma.copy()
18 ma=ma+["1"]
19 #ma=[2,3]
20 ma[0]=ma[0]+1
21 copy_ma[0]=copy_ma[0]+10
22 print(ma,copy_ma)#copy后对old队列操作不影响新队列。#浅拷贝
23 
24 from copy import copy
25 ma=[1,2,[1,2]]
26 copy_ma=copy(ma)#浅拷贝,只对第一层实现深拷贝
27 ma=ma+["1"]
28 ma[0]=ma[0]+1
29 copy_ma[0]=copy_ma[0]+10
30 copy_ma[2][0]=copy_ma[2][0]+10
31 print(ma,copy_ma)
32 
33 import copy
34 ma=[1,2,[1,2]]
35 copy_ma=copy.deepcopy(ma)#深拷贝,无论多少层,无论什么形式,新列表都与原来无关。
36 ma[0]=ma[0]+1
37 copy_ma[0]=copy_ma[0]+10
38 copy_ma[2][0]=copy_ma[2][0]+10
39 print(ma,copy_ma)

输出结果