(來自於牛客網,刷題時候遇到的)
題目:
下面**執行後,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,...