《python中的深拷貝和淺拷貝》

2022-06-14 16:54:10 字數 1627 閱讀 6052

首先,我們得知道什麼是拷貝?

從生活的角度來說拷貝(copy)就是(原件的複製、複寫或模仿)

從程式的角度來說就是(「複製」原有的類容)

在pythonk中的拷貝同理,把原件複製既為拷貝。

舉例1:

**:

#

淺拷貝:

a = [1, 2, 3]

b =a

print

(id(a))

print(id(b))

輸出結果:
2168116617864

2168116617864

(由此可以看出a,b的記憶體位址不變都是指向[1,2,3]這個列表,此為淺拷貝)

**:

#

深拷貝import copy #

匯入copy的包

a = [1, 2, 3, 4, 5]

b =copy.deepcopy(a)

print("

", id(a))

print("

", id(b))

輸出結果:
1696328956616

1696328954440

(由此可以看出a,b的記憶體位址改變了,不僅僅是指向同乙個列表,而是開闢了乙個新的記憶體空間,此為深拷貝)

舉例2:

**:

import

copy

#深拷貝

a = [1, 2, 3, 4, 5]

b =copy.deepcopy(a)

print("a:"

, a)

a[0] = 0 #

替換a列表中的1為0

print("a:"

, a)

print("

b:", b)

輸出結果:
a: [1, 2, 3, 4, 5]

a: [0, 2, 3, 4, 5]

b: [1, 2, 3, 4, 5]

(用了深拷貝,b的值並沒有改變)

**:

import

copy

#淺拷貝

a = [1, 2, 3, 4, 5]

b =a

print("a:"

, a)

a[0] = 0 #

替換a列表中的1為0

print("a:"

, a)

print("

b:", b)

輸出結果:
a: [1, 2, 3, 4, 5]

a: [0, 2, 3, 4, 5]

b: [0, 2, 3, 4, 5]

(淺拷貝,b的值和a一起改變)

總結:

deep copy:深拷貝,把要拷貝的物件整體複製乙份並存在新開闢的空間裡;

shallow copy:淺拷貝指,對於要拷貝的物件要複製乙份,但是對於其內部的子物件就不複製了,而是直接引用;

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