若上图所示,深拷贝后,新的复合对象包含的对象,若对象为不可变对象,则 id 值保持不变,若对象为可变对象,则 id 值发生改变
看一个例子:
>>> import copy >>> a=[1,2,[3,4]] >>> b=copy.deepcopy(a) >>> id(b[0])==id(a[0]) True >>> id(b[2])==id(a[0]) False >>> id(b[2][0])==id(a[2][0]) True接下来让我们修改一下变量 b,这里就不在修改不可变对象 b[0] 和 b[1] 了,因为结果很明显,对 a 不会产生任何影响,我们来修改 b[2],那么修改 b[2] 会对 a[2] 产生影响吗?很明显答案是不会,因为深拷贝就相当于克隆出了一个全新的个体,两者不再有任何关系
>>> b[2][0]=5 >>> b [1, 2, [5, 4]] >>> a [1, 2, [3, 4]]