l = [1,2,['a','b']]
l1 = l //引用
l2 = copy.copy(l) //浅拷贝
l3 = copy.deepcopy(l) //深拷贝
引用方式下,对象l和对象l1的地址是一样的,对对象l的修改会同步影响l1,反过来同样
浅拷贝方式下,对象l和对象l2的地址是不一样的,但是对象的资源(对象包含的对象)的地址是一样的
深拷贝方式下,对象l和对象l2的地址是不一样的,对象的资源(对象包含的对象)的地址也是不一样的
下面的例子反应了这一点:
>>> import copy
>>> l = [1,2,['a','b']]
>>> l1=l //引用
>>> l2=copy.copy(l) //浅拷贝
>>> l3=copy.deepcopy(l) //深拷贝
>>> id(l)
34669192
>>> id(l1)
34669192
>>> id(l2)
34521976
>>> id(l3)
34654128
>>> l[2]
['a', 'b']
>>> id(l[2])
34660560
>>> id(l1[2]) //浅拷贝下,对象的资源是没有拷贝的,地址一样
34660560
>>> id(l3[2])
34663840
>>> l.append(3)
>>> l1
[1, 2, ['a', 'b'], 3]
>>> l2
[1, 2, ['a', 'b']]
>>> l3
[1, 2, ['a', 'b']]
>>> l[2].append('c')
>>> l1
[1, 2, ['a', 'b', 'c'], 3]
>>> l2
[1, 2, ['a', 'b', 'c']]
>>> l3
[1, 2, ['a', 'b']]