is&==©

is與==的區別

a = [1,2,3]app

b = [1,2,3]spa

a == b  對象

    ==>True內存

a is bclass

    ==>False        引用

數字在-5256時如:總結

    a = 1copy

    b = 1co

    a is b  ==> True

is判斷兩個引用是否指向同一對象(地址),引用比較
   a = [1,2,3],b = [1,2,3]中兩個列表存放的地址不一樣,能夠用id(a),id(b)驗證
==判斷兩個對象的值是否相等數字

 

copy與deepcopy

copy

        a = [1,2,3]
   b = a
   ==>id(a) == id(b)
copy(須要導入copy模塊)
   c = copy.deepcopy(a)
   ==>id(a) != id(c)
   此時在另外一地址又存放了一份兒[1,2,3],由c指向這個地址,a還指向原來的[1,2,3]的地址,
   當a指向的那塊地址的值改變後如a.append(4),ac不變。

另外一例淺copy
   a = [1,2,3]
   b = [4,5,6]
   c = [a,b]
   d = c
   此時ab分別指向不一樣的內存地址,c開闢另外一內存空間存放ab這兩個引用,就把c中的a指向原有的a指向的地址,
   c中的b指向原有的b指向的地址。
   dc爲淺copyd指向c的內存地址。
另外一例深copy
        e = copy.deepcopy(c)
   此時e開闢另外一內存空間存放ab這兩個引用,就把這兩個引用所指向的內容在另外一地址又存放一份兒,並分別用e中的
   ab指向它們。
   
再一例copy.deepcopy()
   a = [1,2,3]
   b = [4,5,6]
   c = (a,b) #不可變類型元組
   d = copy.deepcopy(c)
   abd仍是不變,緣由與列表相同

還一例copy.copy()
   a = [1,2,3]
        b = [4,5,6]
          c = [a,b]
          e = copy.copy(c)
   此時e另開一內存存放a,b兩個引用,但這兩個引用仍是指向原來的a,b所指向的內存空間

最後一例copy.copy()
   a = [1,2,3]
           b = [4,5,6]
           c = (a,b)#不可變類型
   e = copy.copy(c)
   此時e並不開闢另外一內存空間,它指向c的地址,ab變它也變

總結:
   深copy,無論被copy的對象是可變類型仍是不可變類型,都是另開闢一塊內存空間,若是存

   放的值是引用,
   那將引用的內容也一樣另開一塊空間存放,其實就是隻要是deepcopy以後,先後二者已經
   沒有任何關係了。
   淺copy,若是被copy的對象是可變類型,就開另外一地址存放,若是是不可變類型,它就直接
   指向被copy對象的地址。若是存放的值是引用,不開闢另外一內存空間,裏面的引用仍是指向原

    來的那個地址,全部原來那個地址的值改變以後,copy過來的值也同時改變。

相關文章
相關標籤/搜索