看到關於一篇Python拷貝的文章,寫的很清晰,轉載一下python
Python中,對象的賦值,拷貝(深/淺拷貝)之間是有差別的,若是使用的時候不注意,就可能產生意外的結果。
下面本文就經過簡單的例子介紹一下這些概念之間的差異。app
直接看一段代碼:函數
will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = will print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber] will[0] = "Wilber" will[2].append("CSS") print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber]
代碼的輸出爲:
code
下面來分析一下這段代碼:對象
下面就來看看淺拷貝的結果:blog
import copy will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = copy.copy(will) print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber] will[0] = "Wilber" will[2].append("CSS") print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber]
代碼結果爲:
分析一下這段代碼:ip
總結一下,當咱們使用下面的操做的時候,會產生淺拷貝的效果:內存
最後來看看深拷貝:字符串
import copy will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = copy.deepcopy(will) print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber] will[0] = "Wilber" will[2].append("CSS") print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber]
代碼的結果爲:
get
分析一下這段代碼:
其實,對於拷貝有一些特殊狀況:
本文介紹了對象的賦值和拷貝,以及它們之間的差別:
PS:做者:田小計劃
出處:http://www.cnblogs.com/wilber2013/