python 浅谈直接赋值、浅拷贝和深拷贝
直接赋值:其实就是对象的引用,或者说是该对对象的另一个别名。
浅拷贝copy():只是对父对象的拷贝,子对象依然只是引用没有拷贝。
深拷贝deepcopy():对一个对象的完全拷贝。
接下来我们看看下面这个例子:
1 >>> a=[1,2,3,['a','b']] #原始列表 2 >>> b=a #直接赋值 3 >>> c=copy(a) #浅拷贝 4 >>> d=deepcopy(a) #深拷贝 5 >>> a.append(4) #在原始列表上添加元素 6 >>> a[3].append('c') #在原始列表的子对象(子列表)添加元素 7 >>> 8 9 #各变量的值 10 >>> a 11 [1, 2, 3, ['a', 'b', 'c'], 4] 12 >>> b 13 [1, 2, 3, ['a', 'b', 'c'], 4] 14 >>> c 15 [1, 2, 3, ['a', 'b', 'c']] 16 >>> d 17 [1, 2, 3, ['a', 'b']] 18 19 #各变量的id 20 >>> id(a),id(a[3]) 21 (1971101283720, 1971101282504) 22 >>> id(b),id(b[3]) 23 (1971101283720, 1971101282504) 24 >>> id(c),id(c[3]) 25 (1971101268360, 1971101282504) 26 >>> id(d),id(d[3]) 27 (1971101268616, 1971101285768) 28 >>>
结合概念我们来分析一下上面的例子:
(1)直接赋值
由上面的例子很明显b受a的影响,随着a的变化。从b的id可以看出b和a都指向同一个对象。

(2)浅拷贝
由C的值看出外层列表的改变c并没有随着改变,但是内层的列表却发生改变。结合列表c的id,可以看出外层列表id并不相同,但是内层列表却只想同一个。

(3)深拷贝
d列表完全没有发生变化,同时外层和内层列表的id均与a不相同


浙公网安备 33010602011771号