一、深淺拷貝
深淺拷貝是指copy模組下的copy()和deepcopy()方法。
1、淺拷貝
示例:
>>> importcopy
>>> a = '
hello word
'>>> b =
>>> a1 =copy.copy(a)
>>> b1 =copy.copy(b)
id(a)
140458175739296
id(a1)
140458175739296
id(b)
140458175695680
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:
>>> importcopy
>>> a = '
hello word
id(a)
140069292463520
>>> a1 =copy.deepcopy(a)
id(a1)
140069292463520
對於字串或者整型,深拷貝同淺拷貝效果一樣,其記憶體位址不會發生改變。
示例2:
>>> importcopy
>>> b =
>>> b1 =copy.deepcopy(b)
id(b)
140442326100800
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):#乙個可變引數,放在元組中
argfunc (1,2,3,4,5,6)#
結果為乙個元組:(1,2,3,4,5,6)
*arg 表示該函式可以接受個數可變的引數,將獲取的所有引數存放在乙個元組中。
示例2:
def func (**kwargs):#乙個可變引數,放在字典中
kwargs
func(a=123,b=234,c=345)#
結果為乙個字典:
**kwargs 表示該函式可以接受個數可變的引數,將獲取的所有引數以鍵值對形式存放在字典中。
示例3:
def func (*arg,**kwargs):arg,kwargs
l = [11,22,33]
d =
func(l,d)
#結果為乙個元組和乙個空字典:([11, 22, 33], ) {}
該函式有兩個形參,當給函式傳參時(引數為乙個元組和乙個字典),函式會把這兩個引數傳給第乙個形參*arg,生成乙個元組。**kwargs沒有接收引數,為乙個空字典。
示例4:
def func(*arg,**kwargs):#兩個可變引數,字串放在元組中,鍵值對放在字典中
arg,kwargs
func(
'aha
','dfjid
','fdjfdkf
',a=123,b=234)#
結果為:('aha', 'dfjid', 'fdjfdkf')
既有字串,也有鍵值對時,字串傳遞給*arg,放在元組中,鍵值對傳遞給**kwargs,放在字典中。
示例5:
def func (*arg,**kwargs):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 ...