賦值
賦值只是複製了對象的引用,賦值後兩個對象指向同一個內存空間,不會開闢新的內存空間,原對象發生改變的話,賦值後的對象也會隨之變化。
我們可以使用id()來獲取複製前後兩個對象的內存地址
可以看到兩個對象的內存地址是相同的,即指向同一內存空間,其中一個對象的內容發生變化,另外一個也會隨之改變
拷貝
拷貝的概念是在原對象的基礎上創建一個新對象,如果你想對列表做出某些修改,但同時還想保持原來的列表,這時,就可以使用拷貝,拷貝分爲淺拷貝與深拷貝,兩者在使用上有一定的區別
淺拷貝
1、淺拷貝有三種方法可以實現,分別是切片方法、工廠函數、copy模塊中的copy函數
切片方法:lst2 = lst1[:]
工廠函數:lst3 = list(lst1)
copy模塊:lst4 = copy.copy(lst1)
2、淺拷貝中拷貝原對象的一層,就是說如果一個列表中嵌套了另外一個列表,使用淺拷貝得到一個新的列表後,如果列表中嵌套的列表發生變化,那麼另外一個列表也會隨之變化,使用id()查看拷貝前後兩個列表中嵌套列表的內存地址
操作一下看看:
深拷貝
深拷貝只有一種形式,那就是使用copy模塊的deepcopy函數,和淺拷貝對應,深拷貝拷貝了對象的所有元素,包括多層嵌套的元素,深拷貝拷貝出來的對象是一個全新的對象,不再與原來的對象有任何關聯。