大概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...