通過一個簡單的例子來理解深拷貝與淺拷貝:
例1:比如有如下一段代碼:

普通的賦值操作就相當于淺拷貝,不會復制對象中的內(nèi)容,只會將原有的內(nèi)存地址賦值給新變量,這兩個對象指向同一塊內(nèi)存地址,因此,兩個對象的ID值是相同的。
例2:在上一代碼基礎上進行深拷貝操作

對nums進行深拷貝操作后,不論是外層對象,還是內(nèi)層引用的對象,都會重新開辟一個新的內(nèi)存空間,因此進行深拷貝后的ID值是不同的。
例3:對列表進行添加操作

例4:進行淺拷貝操作

當對象中的元素又引用了其他對象時,copy()方法只會對外層對象創(chuàng)建新的內(nèi)存空間,內(nèi)層引用不會開辟新的內(nèi)存空間,依然使用原來的對象,因此當原列表進行添加操作后,會影響copy()方法創(chuàng)建出的對象。
例5:將nums的類型由列表變?yōu)樵M

將nums變?yōu)樵M后,deepcopy()方法仍會開辟新的內(nèi)存空間,內(nèi)層對象不會受原來對象變化的影響
例6:將例5中的deepcopy()換成copy()
