python之深淺拷貝

2021-09-20 20:29:22 字數 2376 閱讀 2213

對於 數字 和 字串 而言,賦值、淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址。

importcopy

# ######### 數字、字串 #########

n1=123

# n1 = "age 10"

print(id(n1))

# ## 賦值 ##

n2=n1

print(id(n2))

# ## 淺拷貝 ##

n2=copy.copy(n1)

print(id(n2))

# ## 深拷貝 ##

n3=copy.deepcopy(n1)

print(id(n3))

對於字典、元組、列表而言,進行賦值、淺拷貝和深拷貝時,其記憶體位址的變化是不同的。

賦值

淺拷貝,在記憶體中只額外建立第一層資料

>>> n1 =

>>> n3 = copy.copy(n1)

>>> print id(n1)

11267952

>>> print id(n3)

11151792

>>> print id(n1['k3'])  ##檢視記憶體位址相同

139853825328696

>>> print id(n3['k3'])  ##檢視記憶體位址相同

深拷貝,在記憶體中將所有的資料重新建立乙份(排除最後一層,即:python內部對字串和數字的優化)

>>> import copy

>>> n1 =

>>> n4 = copy.deepcopy(n1)

>>> print id(n1)

11193264

>>> print id(n4)

11249664

>>> print id(n1['k3'])  ##檢視記憶體位址不同

139853635849824

>>> print id(n2['k3'])  ##檢視記憶體位址不同

深淺拷貝應用場景

監控場景:更改拷貝後的資料,而原來的資料保持不變!

指令碼如下:

#!/usr/bin/env python

#coding: utf8

import copy

#目的是更改資料後,原來的資料不變,而拷貝後的資料會隨時更新!

dic =

print("before:",dic)

#new_dic = copy.copy(dic)     ##淺拷貝後的資料更新會把原來和新的字典內容的資料都更新!

new_dic = copy.deepcopy(dic)   ##深拷貝只更新拷貝後的資料,而原來的資料保留不變!

new_dic["cpu"][0] = 50

print(dic)

print(new_dic)

輸出內容:

before:

python

深淺拷貝

python之深淺拷貝

lis 1 3,world 1,hello lis 2 lis 1.copy print 列表1元素的id lis 1,id lis 1 0 id lis 1 0 0 id lis 1 0 1 id lis 1 1 id lis 1 2 print 列表2元素的id lis 2,id lis 2 0...

python之深淺拷貝

基礎沒打牢,python的深淺copy老是混淆,模稜兩可的。一 物件賦值 a 1,2,3 b a 物件賦值 print id a print id b 執行上面的 可以發現id a id b 為什麼呢?其實是在記憶體中有乙個列表 1,2,3 a和b就是兩個標籤,都指向列表 1,2,3 如下圖 當修改...

python之深淺拷貝

在python中的資料型別包括 bool,int,float,str,set,list,tuple,dict等。簡單資料型別 bool,int,float,str 複雜資料型別 list,tuple,set,dict 對於簡單的資料型別變數在記憶體中儲存都是儲存 資料本身 而對於複雜的資料型別來說,...