1.直接赋值:在内存中的地址是一个,是对象的引用,
2.浅拷贝:藕断丝连,拷贝父对象,但不会拷贝对象内部的子对象,子对象还是引用
3.深拷贝:毫无关系,互不影响,完全拷贝父对象及其子对象,内容虽一样,但内存中的地址不是一个;
直接赋值实例:
>>> a=[1,2,3,4,["a","b"]]
>>> b=a
>>> id(a)
2307481148552
>>> id(b)
2307481148552 #地址是一个,a和b都指向同一个对象
>>> a
[1, 2, 3, 4, ['a', 'b', 'c'], 6]
>>> b
[1, 2, 3, 4, ['a', 'b', 'c'], 6]
浅拷贝实例:
>>> import copy
>>> a=[1,2,3,4,["a","b"]]
>>> c=copy.copy(a)
>>> c
[1, 2, 3, 4, ['a', 'b']]
>>> a.append(6)
>>> a[4].append("c")
>>> a
[1, 2, 3, 4, ['a', 'b', 'c'], 6]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c']]
>>> id(a)
2307481148552
>>> id(c)
2307481256328 #地址不是一个,a和c都是一个独立的对象
>>> id(a[4])
2307481148360
>>> id(c[4])
2307481148360 #子对象的地址还是一个,所以子对象还是指向统一对象(是引用)
深拷贝实例:
>>> a=[1,2,3,4,["a","b"]]
>>> import copy
>>> d=copy.deepcopy(a)
>>> id(a)
2307481148552
>>> id(d)
2307481256392 #地址不一样
>>> id(a[4])
2307481148360
>>> id(d[4])
2307481256264 #子对象地址也不一样,所以两者完全独立