Python之深淺拷貝 函式

2022-02-24 16:26:51 字數 2524 閱讀 7014

一、深淺拷貝

深淺拷貝是指copy模組下的copy()和deepcopy()方法。

1、淺拷貝

示例:

>>> import

copy

>>> a = '

hello word

'>>> b =

>>> a1 =copy.copy(a)

>>> b1 =copy.copy(b)

>>> print

id(a)

140458175739296

>>> print

id(a1)

140458175739296

>>> print

id(b)

140458175695680

>>> print

id(b1)

140458175749208

>>> print id(b[3])

140458175609096

>>> print id(b1[3])

140458175609096

>>> print id(b[3][0])

41361752

>>> print id(b1[3][0])

41361752

淺拷貝時,變數的記憶體位址不會發生改變。

2、深拷貝

示例1:

>>> import

copy

>>> a = '

hello word

'>>> print

id(a)

140069292463520

>>> a1 =copy.deepcopy(a)

>>> print

id(a1)

140069292463520

對於字串或者整型,深拷貝同淺拷貝效果一樣,其記憶體位址不會發生改變。

示例2:

>>> import

copy

>>> b =

>>> b1 =copy.deepcopy(b)

>>> print

id(b)

140442326100800

>>> print

id(b1)

140442326156184

>>> print id(b[3])

140442326014216

>>> print id(b1[3])

140442326097288

>>> print id(b[3][0])

32555352

>>> print id(b1[3][0])

32555352

深拷貝時,除了最內層資料(字串或數字)外,其他資料都會重新建立乙份,記憶體位址發生改變。

二、函式之動態引數

示例1:

def func (*arg):#

乙個可變引數,放在元組中

print

argfunc (1,2,3,4,5,6)#

結果為乙個元組:(1,2,3,4,5,6)

*arg 表示該函式可以接受個數可變的引數,將獲取的所有引數存放在乙個元組中。

示例2:

def func (**kwargs):#

乙個可變引數,放在字典中

print

kwargs

func(a=123,b=234,c=345)#

結果為乙個字典:

**kwargs 表示該函式可以接受個數可變的引數,將獲取的所有引數以鍵值對形式存放在字典中。

示例3:

def func (*arg,**kwargs):

print

arg,kwargs

l = [11,22,33]

d =

func(l,d)

#結果為乙個元組和乙個空字典:([11, 22, 33], ) {}

該函式有兩個形參,當給函式傳參時(引數為乙個元組和乙個字典),函式會把這兩個引數傳給第乙個形參*arg,生成乙個元組。**kwargs沒有接收引數,為乙個空字典。

示例4:

def func(*arg,**kwargs):#

兩個可變引數,字串放在元組中,鍵值對放在字典中

print

arg,kwargs

func(

'aha

','dfjid

','fdjfdkf

',a=123,b=234)#

結果為:('aha', 'dfjid', 'fdjfdkf')

既有字串,也有鍵值對時,字串傳遞給*arg,放在元組中,鍵值對傳遞給**kwargs,放在字典中。

示例5:

def func (*arg,**kwargs):

print

arg,kwargs

l = [11,22,33]

d =

func(*l,**d)#

結果為:(11, 22, 33)

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之深淺拷貝

對於 數字 和 字串 而言,賦值 淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址。importcopy 數字 字串 n1 123 n1 age 10 print id n1 賦值 n2 n1 print id n2 淺拷貝 n2 copy.copy n1 print id n2 深拷貝 n3 ...