淺拷貝調用copy模塊下的copy()方法-----> b = copy.copy(a) #a為初始對象,b為淺拷貝對象
深拷貝調用copy模塊下的deepcopy()方法------> b = copy.deepcopy(a) #a為初始對象,b為深拷貝對象
import copy list1 = [[1,2],'abc'] list2 = copy.copy(list1) list3 = copy.deepcopy(list1) print('原始對象:' + str(list1) + ' # 其中第一個元素[1,2]為可變元素') print('原始對象地址:'+ str(id(list1)) + ' 可變元素對象地址:' + str(id(list1[0]))) print('淺拷貝對象:' + str(list2)) print('淺拷貝對象地址:'+ str(id(list2)) + ' 可變元素對象地址:' + str(id(list2[0]))) print('深拷貝對象:' + str(list3)) print('深拷貝對象地址:' + str(id(list3)) + ' 可變元素對象地址:' + str(id(list3[0]))) list1[0].append(3) print('-------原始對象中的列表改變----------') print('改變后原始對象:' + str(list1)) print('改變后原始對象地址:'+ str(id(list1)) + ' 可變元素對象地址:' + str(id(list1[0]))) print('改變后淺拷貝對象:' + str(list2)) print('改變后淺拷貝對象地址:'+ str(id(list2)) + ' 可變元素對象地址:' + str(id(list2[0]))) print('改變后深拷貝對象:' + str(list3)) print('改變后深拷貝對象地址:' + str(id(list3)) + ' 可變元素對象地址:' + str(id(list3[0])))
代碼運行結果如下:

可以看出淺拷貝和深拷貝后對象地址都會發生變化
不同的是如果原始對象中有可變元素(如上圖中的列表[1,2]),淺拷貝后可變元素地址一樣,而深拷貝后可變元素地址不一樣
所以當初始對象中的可變元素發生改變時(如在列表中增加元素),淺拷貝對象也會發生變化,而深拷貝對象不會
python的默認拷貝方式是淺拷貝,因為花費時間更短、使用內存更少、效率更高。
詳細點可以看:https://blog.csdn.net/bufengzj/article/details/90486991

