python list 複製拷貝問題

2021-08-15 21:07:55 字數 1163 閱讀 5086

大概python繞不開這個小小的問題。。很簡單不過還是記錄一下吧。

my_list = [ ... ]

new_list = my_list

這樣的操作並不會獲得乙個my_list的副本,而是會讓new_list也「指向」my_list,共享內容。

my_list = [ 1 ,2 ,3 ]

new_list = my_list

new_list[0] = 0

print(new_list, my_list)

輸出的結果是:

[0, 2, 3] [0, 2, 3]
而不是

[0, 2, 3] [1, 2, 3]
用乙個id()函式就可以明白為什麼是這樣了:

print(id(new_list), id(my_list))

>> 139941656081864

139941656081864

二者完全相同!因此對new_list操作就等於對my_list操作。

new_list = old_list[:]

這個方法看起來最簡單,但大神alex martelli並不推薦使用,認為下面的更加可讀。

new_list = list(old_list)

這種方法使用了內建的list()函式,生成乙個新的list。

new_list = copy.copy(old_list)

首先需要匯入copy庫,利用其中的copy函式進行複製。這種方法比較萬能,可以用於任意型別,但缺點是速度稍慢,它需要先確定要複製內容的資料型別。

new_list = copy.deepcopy(old_list)

copy庫中的深拷貝,最慢的一種,但有時是必須的。

至於深淺拷貝的問題,推薦看python-copy()與deepcopy()區別的文章。

python list內容拷貝方法

先看如下 x a b z y x print yy 0 w print x,y 結果輸出 a b z y list w b z w b z y第乙個元素改變後,x,y一起變化 有時候如果你真的希望將x的list元素一併拷貝給另乙個list。而改變另乙個list,不希望改變原list,該怎麼辦?x a...

python List與String 轉化問題

現有list如下 a i 0,0,0,0,0 注意此時0為整數 現在希望將a轉化為string 使用如下語句 str1 str1.join a 0 print str1 發現執行出錯,求指教!1.string的jion 方法,裡面使用的引數需要是所有元素都是string的list 而你的list a...

Map拷貝複製

map物件複製,為位址,在此物件上做改動,原物件也會相應改動。putall為深複製,重新建立乙個map物件 public static void main string args parammap2 parammap 修改parammap2後,parammap值 修改parammap2後,param...