1. 程式人生 > >python-深拷貝和淺拷貝;is和==的區別

python-深拷貝和淺拷貝;is和==的區別

1.深拷貝和淺拷貝

  • 淺拷貝–copy.copy( )
    只是拷貝了基本型別的資料,而引用型別資料,複製後也是會發生引用,我們把這種拷貝叫做“淺拷貝”,換句話說,淺拷貝僅僅是指向被複制的記憶體地址,如果原地址中物件被改變了,那麼淺複製出來的物件也會相應改變

  • 深拷貝–copy.deepcopy( )
    在計算機中開闢了一塊新的記憶體地址用於存放複製的物件。

  • 深拷貝和淺拷貝最根本的區別在於是否真正獲取一個物件的複製實體,而不是引用。
    假設B複製了A,修改A的時候,看B是否發生變化:

    如果B跟著也變了,說明是淺拷貝,拿人手短!(修改堆記憶體中的同一個值),引用

    如果B沒有改變,說明是深拷貝,自食其力!(修改堆記憶體中的不同的值)

  • 如果,用copy.copy( ) copy.deepcopy( )對一個全部是不可變型別的資料進行資料拷貝,那麼它們的結果相同,都是引用

    如果拷貝的是一個擁有可變型別的資料,那麼deepcopy依然是深拷貝,而copy.copy還是指向

2.is和==的區別

id:在記憶體中儲存的位置
type:變數的型別
value:變數的值
== :type,value
is:type,value,id

  • 結論:
    is 表示兩個變數的值是否在同一塊記憶體空間
    == 表示的是值是否相等
  • 總結: is 返回的值是True ==返回的一定是true
In [1]: a = '1'

In [2]: b = 1

In [3]: a == b
Out[3]: False

In [4]: a = '1'

In [5]: b = a