有一次,在幫師兄做題的時候,調乙個bug始終沒有調通,後來幾經波折,終於有了結果。現在將其中的坑,share出來。其實主要是對python中的深拷貝和淺拷貝理解出現了偏差導致的。
python中自帶了乙個copy模組,這個模組用來執行深拷貝和淺拷貝。
淺拷貝:
l1 = [1,2,3,4]深拷貝:l2 = l1 #
l2引用l1, 實際都指向同乙個物件
(l2)
#[1, 2, 3, 4]
l1[0] = 99 #
對l2的操作就是對l1的操作
(l1)
#[99, 2, 3, 4]
(l2)
#[99, 2, 3, 4]
######################
from copy import
copy
l1 = [1, 2, [3, 4]] #
物件中包含物件
l2 =copy(l1)
(l2)
#[1, 2, [3, 4]]
(l1)
#[1, 2, [3, 4]]
l2[2][0] = 99
(l1)
#[1, 2, [99, 4]]
(l2)
#[1, 2, [99, 4]]
l1[1] = 88
(l1)
#[1, 88, [99, 4]]
(l2)
#[1, 2, [99, 4]]
from copy importdeepcopy
l1 = [1, 2, 3, 4]
l2 = deepcopy(l1) #
l2指向l1一樣的新物件
(l2)
#[1, 2, 3, 4]
l2[0] = 99 #
對l2的操作不會影響到l1
python中對list的拷貝:
一:非常奇怪的語法
new_list = old_list[:]二:內建list()函式new_list = list(old_list)三:copy這個要比list()慢一點,因為它要找到old_list的型別
import四:最慢和最消耗記憶體的方法,但是有時是必須的copy
new_list = copy.copy(old_list)
importcopy
new_list = copy.deepcopy(old_list)
python中的淺拷貝和深拷貝
不得不說 python核心程式設計 是一本好書,看到其中一節做一下隨筆。在python中,當建立乙個物件後,然後把它賦給另乙個物件時,python並沒有去拷貝這個物件,而是拷貝了這個物件的引用。看不懂沒關係,我們看乙個例子。raw list first second 12 32 copy list ...
python中的深拷貝和淺拷貝
淺拷貝 copy 不拷貝物件的內容,僅僅拷貝子物件的引用 深拷貝 deepcopy 會連同拷貝子物件的記憶體,對子物件的修改不會影響源物件 下面用 來測試 import copy deftest copy 淺拷貝測試 a 10 20,5,6 b copy.copy a print a a,end t...
python中的淺拷貝和深拷貝
本篇介紹下python中的深拷貝和淺拷貝,主要從基本型別 類 不可變型別等方面進行介紹。1.介紹拷貝之前首先應該明白is和 的區別,即is表示同乙個物件,比較的是值 a 1000 b 1000 a b true a is bfalse class person object def init sel...