1. 程式人生 > >python中對dict或list等可變物件進行append操作

python中對dict或list等可變物件進行append操作

python append()與深拷貝、淺拷貝

深淺拷貝

在python中,物件賦值實際上是物件的引用。當建立一個物件,然後把它賦給另一個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用。我們稱之為淺拷貝。

在python中,為了使當進行賦值操作時,兩個變數互補影響,可以使用copy模組中的deepcopy方法,稱之為深拷貝。

append()函式

當對list型別或者dict等可變物件進行append操作時,實際上追加的是該物件的引用。 
示例:

alist = []
num = [2]
alist.append( num )
id( num ) == id( alist[0] )
輸出: True

如上例所示,當num發生變化時(前提是id(num)不發生變化),alist的內容隨之會發生變化。往往會帶來意想不到的後果,想避免這種情況,可以採用深拷貝解決:

alist.append( copy.deepcopy( num ) )

PS: 
id()函式:返回物件的唯一標識,可以類比成該物件在記憶體中的地址。