python標準庫的copy模塊提供了兩個函數來建立拷貝。第一個經常使用的函數式copy,它會返回一個具備一樣的內容和屬性的對象。java
import copy new_list=copy.copy(list)python
某些特殊的時候,你可能會須要對象中的屬性和內容被分別遞歸的拷貝,這個時候可使用deepcopyapp
import copy new_list=copy.deepcopy(list)函數
當給一個對象賦值(或者將其做爲參數傳遞,或者做爲結果返回),python和java同樣使用一個指向原對象的引用,並非真正的拷貝。python歷來不爲賦值操做進行‘隱士’拷貝:要獲得一個拷貝,必須明確的要求,須要的是拷貝。對象
a=[1,2,3,4] b=a b.append(5) print(a) print(b) print(a is b)遞歸
#[1, 2, 3, 4, 5] #[1, 2, 3, 4, 5] #True 這裏,名字a和b都引用到一樣的對象列表a,因此不管咱們經過哪一個名字修改了對象的內容,修改的結果都是同樣的,這個過程過程當中並無一個原始的未被修改的拷貝。import
提示: 要成爲一個好的python,必須瞭解修改對象和將對象賦值給變量的區別,賦值使用的是引用。這兩種操做相互之間並無什麼關聯。相似a=[]這種語句,是對a作了從新綁定,但卻不會影響原來綁定到的a對象。所以,這裏徹底沒有引用和拷貝的問題:只有當須要修改某些對象的時候,引用和拷貝纔有可能成爲問題。變量
若是想修改一個對象,但又不須要改動原對象,必須作一個拷貝。引用