1.赋值(=)
赋值其实就是对对象的直接引用。例子如下:
由下方代码可知:把lz1赋值给lz2,lz1和lz2的地址(id)是相同的,向lz1添加一个元素,lz2的元素同步的也会发生修改。
lz1 = [1,2,3,4]
lz2 = lz1
print(id(lz1)) # 输出:140608361616648
print(id(lz2)) # 输出:140608361616648
lz1.append(5)
print(lz1) # 输出:[1, 2, 3, 4, 5]
print(lz2) # 输出:[1, 2, 3, 4, 5]
2.浅拷贝(copy())记得使用前先import下copy
浅拷贝只会拷贝父对象,不会拷贝对象内部的子对象,他们的子对象还是指向统一对象(即引用子对象)
import copy
ls1 = [1,2,3,4]
ls3 = ls1.copy()
print(id(ls1),id(ls3)) # 浅拷贝,ID值不同--》140310230470408 140310230471176
ls1.append(5)
print(ls1,ls3) # 对ls1进行浅拷贝操作,不会影响ls3的值 --》[1, 2, 3, 4, 5] [1, 2, 3, 4]
# 浅拷贝
ls3 = {'a':[1,2,3,4]}
ls4 = ls3.copy()
ls3['a'].append(5)
# 输出结果可知,字典对象ls3的子对象的值发生改动时,因为浅拷贝不会拷贝对象的内部子对象,
# 他们的子对象还是指向统一的对象,所以ls3的子对象有改动时,ls4也会改动
print(ls3) # {'a': [1, 2, 3, 4, 5]}
print(ls4) # {'a': [1, 2, 3, 4, 5]}
# 注意!!! 修改ls3的子对象指向其他对象,ls4仍指向原对象
ls3['a'] = [6,7]
print(ls3) # {'a': [6, 7]}
print(ls4) # {'a': [1, 2, 3, 4, 5]}
3.深拷贝(copy 模块的 deepcopy 方法)
完全拷贝了父对象及其子对象
# ls3 = {'a': [1, 2, 3, 4, 5]}
ls5 = copy.deepcopy(ls3)
ls3['a'].append(88)
print(ls3,ls5) # {'a': [1, 2, 3, 4, 5, 88]} {'a': [1, 2, 3, 4, 5]}
-------------------------------------------------------------------------------------