Python練習四-淺拷貝&深拷貝

來源:互聯網
上載者:User

標籤:open   class   style   art   lin   code   log   pen   for   

一、數字、字串不論是淺拷貝、深拷貝都是指向一個地址。

a = 1b = "abc"print (id(a))print (id(b))a1 = ab1 = bprint (id(a1),id(b1))a2 = copy.copy(a)b2 = copy.copy(b)print (id(a2),id(b2))a3 = copy.deepcopy(a)b3 = copy.deepcopy(b)print (id(a3),id(b3))
View Code

二、列表、元組、字典的淺拷貝、深拷貝指向的地址是變化的。

1.元組中包含列表、字典 

#定義個函數:列印元組中所有資料的地址def print_tuple(tuple):    tup = tuple    print tup,id(tup)    for k, v in enumerate(tup, 1):        print v, id(v)        if type(v) == list:            key = v            for k, v in enumerate(key, 1):                print v, id(v)        elif type(v) == dict:            key = v            for item in key:                print item, id(item)                print key[item], id(key[item])tup = (1,2,[‘a‘,‘b‘],{"k1":11})print "1、元組中包含字典、列表"print_tuple(tup)#tup1 = tup#print "======賦值後======"#print_tuple(tup1)tup2 = copy.copy(tup)print "======淺拷貝後======"print_tuple(tup2)tup3 = copy.deepcopy(tup)print "======深拷貝後======"print_tuple(tup3)
View Code

賦值、淺拷貝後,元組和元組中所有元組地址,都指向的是一個地址;

深拷貝後,元組、元組中列表、字典的地址都是新建立的,其他的元素地址與原來一致; 

2.字典中包含列表、元組

#定義個函數:列印字典中所有資料的地址def print_dic(dict):    dic = dict    print dic,id(dic)    for item in dic:        print item, id(item)        print dic[item], id(dic[item])        if type(dic[item]) == list:            li = dic[item]            for k, v in enumerate(li, 1):                print v, id(v)        elif type(dic[item]) == tuple:            tup = dic[item]            for k, v in enumerate(tup, 1):                print v, id(v)dic = {"a":11,"c":12,"d":(‘x‘,100,‘z‘),"2":["b",13]}print "2、字典包含列表、元組"print_dic(dic)#dic1 = dic#print "======賦值後======"#print_dic(dic1)dic2 = copy.deepcopy(dic)print "======深拷貝後======"print_dic(dic2)#dic3 = copy.copy(dic)#print "======淺拷貝後======"#print_dic(dic3)
View Code

賦值指向的是一個地址;

淺拷貝後,字典的地址是新建立的,裡面元素(包括列表、元組)的地址與原來一致;

深拷貝後,字典的地址、字典中列表的地址是新建立的,元組的地址還是原來的,裡面的元素地址與原來一致;

3.列表中包含字典、元組

#定義個函數:列印列表中所有資料的地址def print_out(list):    li = list    print li,id(li)    for item in li:        print item, id(item)        # print li[i],id(li[i])        if type(item) == dict:            dic = item            # for k,v in enumerate(dic,1):            # print k,id(k)            # print v,id(v)            for item in dic:                print item, id(item)                print dic[item], id(dic[item])        elif type(item) == tuple:            tup = item            for k, v in enumerate(tup, 1):                print v, id(v)li = [‘1‘,(‘x‘,‘y‘),{"k1":0,"k2":10}]print_out(li)#li1 = li#print "======賦值後======"# print_out(li1)#li2 = copy.copy(li)#print "======淺拷貝後======"#print_out(li2)li3 = copy.deepcopy(li)print "======深拷貝後======"print_out(li3)
View Code

賦值指向的是一個地址;

淺拷貝後,列表的地址是新建立的,裡面元素(包括字典、元組)的地址與原來一致;

深拷貝後,列表的地址、列表中字典的地址是新建立的,元組的地址還是原來的,其他的元素地址與原來一致;

總結:

1.元組本身在深淺拷貝中,地址會變;但作為列表或者字典的元素時,在深拷貝列表或字典時,地址是不變的。

2.列表、字典本身在淺拷貝中地址會變;作為元素時,在深拷貝中地址才會變;

Python練習四-淺拷貝&深拷貝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.