python之深拷貝 淺拷貝

2021-08-16 07:08:28 字數 1062 閱讀 7496

(來自於牛客網,刷題時候遇到的)

題目:

下面**執行後,a、b、c、d四個變數的值,描述錯誤的是?

import

copy

a = [1,2,3,4, ['a', 'b']]

b = a

c = copy.copy(a)

d = copy.deepcopy(a)

(5)

選項:

a == [1,2, 3, 4, [『a』, 『b』, 『c』], 5]

b == [1,2, 3, 4, [『a』, 『b』, 『c』], 5]

c == [1,2, 3, 4, [『a』, 『b』, 『c』]]

d == [1,2, 3, 4, [『a』, 『b』, 『c』]]

答案: d

則: a=[1, 2, 3, 4, [『a』, 『b』,』c』],5]

b=[1, 2, 3, 4, [『a』, 『b』,』c』],5]

c=[1, 2, 3, 4, [『a』, 『b』,』c』]]

d=[1, 2, 3, 4, [『a』, 『b』]]

都是進行物件引用(記憶體位址)傳遞,即『』 b is a『』 ,a 變 b 也變

會建立乙個新的物件,即 「c is not a」 ,但是,對於物件中的元素,淺拷貝就只會使用原始元素的引用(記憶體位址),也就是說」c[i] is a[i]」

當我們使用下面的操作的時候,會產生淺拷貝的效果:

• 使用切片[:]操作

• 使用工廠函式(如list/dir/set)

• 使用copy模組中的copy()函式

會建立乙個新的物件,即」d is not a」 ,並且 對於物件中的元素,深拷貝都會重新生成乙份(有特殊情況,下面會說明),而不是簡單的使用原始元素的引用(記憶體位址)

拷貝的特殊情況

其實,對於拷貝有一些特殊情況:

• 對於非容器型別(如數字、字串、和其他』原子』型別的物件)沒有拷貝這一說

• 如果元祖變數只包含原子型別物件,則不能深拷貝

python之深拷貝 淺拷貝

如上圖,變數a和b的記憶體位址是相同的,說明python中的賦值可以看作是引用,變數指向了同乙個記憶體空間 copy模組中的deepcopy就展示了深拷貝,c就是通過a的深拷貝 測試一下,追加a列表,c並沒有發生變化,c指向的是乙個新的記憶體空間 這段 是要說明copy模組下的copy是淺拷貝,但是...

python 淺拷貝 深拷貝

直接賦值 其實就是物件的引用 別名 淺拷貝 copy 拷貝父物件,不會拷貝物件的內部的子物件。深拷貝 deepcopy copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。usr bin python import copy a 1,2,3,4,a b 原始物件 b a 賦值,傳物...

python深拷貝 淺拷貝

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法,alist 1,2,3,a b 1 直接賦值,傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變 alist 1,2,3,...