變數最終是儲存於記憶體中的,儲存於記憶體內的一塊空間之中
深拷貝是將記憶體中a類(指標類)指向最終的值,複製到其他記憶體區塊中
淺拷貝只是複製指標,指向記憶體區塊
import copy
deffun3()
:print
("深拷貝 淺拷貝(預設)"
) alist =[1
,2,3
,["a",
"b"]
]# 淺拷貝
c = copy.copy(alist)
# 深拷貝
d = copy.deepcopy(alist)
# 普通賦值
e = alist
print(id
(alist)
)print(id
(c))
print(id
(d))
print(id
(e))
print
(alist is c)
print
(alist is d)
print
(alist is e)
print
("----- 接下來看神操作"
)# a = ["3"]
# a = "3"
a =3# b = a
b = copy.deepcopy(a)
# b= copy.copy(a)
print(id
(a))
print(id
(b))
print
(a is b)
''' 所以綜上所述,對於數字和字串的賦值、淺拷貝、深拷貝在記憶體當中用的都是同一塊位址。
對於淺拷貝,字典、列表、元組等型別,它們只拷貝第一層位址
對於深拷貝,它會拷貝多層,
將第二層的列表也拷貝乙份,如果還有第三層巢狀,那麼第三層的也會拷貝,
但是對於裡面的最小元素
比如數字和字串等基礎型別
按照python的機制,它們會共同指向同乙個位置,它的記憶體位址是不會變的。
區別於淺拷貝只拷貝頂層引用,深拷貝會逐層進行拷貝,直到拷貝的所有引用都是不可變引用為止。
id() 函式就是返回物件的記憶體位址
is 是比較兩個變數的物件引用是否指向同乙個物件
不要和 == 混了,== 是比較兩個變數的值是否相等
'''
python之深拷貝 淺拷貝
來自於牛客網,刷題時候遇到的 題目 下面 執行後,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...
python之深拷貝 淺拷貝
如上圖,變數a和b的記憶體位址是相同的,說明python中的賦值可以看作是引用,變數指向了同乙個記憶體空間 copy模組中的deepcopy就展示了深拷貝,c就是通過a的深拷貝 測試一下,追加a列表,c並沒有發生變化,c指向的是乙個新的記憶體空間 這段 是要說明copy模組下的copy是淺拷貝,但是...
Python 淺拷貝與深拷貝
淺拷貝 構造方法或切片 做的是淺拷貝 即拷貝了最外層容器,副本中的元素是原容器中元素的引用 在 python 中,通過乙個物件向另外乙個物件賦值,實際僅僅是賦值了物件的引用,而非建立乙個物件並賦值。那如何真正拷貝物件呢?我們看一下兩種不同的拷貝方式。先從乙個示例看起 anndy anndy age ...