Python中的深拷貝和淺拷貝

2022-05-05 06:21:12 字數 1665 閱讀 3958

有一次,在幫師兄做題的時候,調乙個bug始終沒有調通,後來幾經波折,終於有了結果。現在將其中的坑,share出來。其實主要是對python中的深拷貝和淺拷貝理解出現了偏差導致的。

python中自帶了乙個copy模組,這個模組用來執行深拷貝和淺拷貝。

淺拷貝:

l1 = [1,2,3,4]

l2 = l1 #

l2引用l1, 實際都指向同乙個物件

print

(l2)

#[1, 2, 3, 4]

l1[0] = 99 #

對l2的操作就是對l1的操作

print

(l1)

#[99, 2, 3, 4]

print

(l2)

#[99, 2, 3, 4]

######################

from copy import

copy

l1 = [1, 2, [3, 4]] #

物件中包含物件

l2 =copy(l1)

print

(l2)

#[1, 2, [3, 4]]

print

(l1)

#[1, 2, [3, 4]]

l2[2][0] = 99

print

(l1)

#[1, 2, [99, 4]]

print

(l2)

#[1, 2, [99, 4]]

l1[1] = 88

print

(l1)

#[1, 88, [99, 4]]

print

(l2)

#[1, 2, [99, 4]]

深拷貝:

from copy import

deepcopy

l1 = [1, 2, 3, 4]

l2 = deepcopy(l1) #

l2指向l1一樣的新物件

print

(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)

四:最慢和最消耗記憶體的方法,但是有時是必須的

import

copy

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