python高階 深淺拷貝

2021-09-27 11:51:10 字數 1860 閱讀 6518

is與的區別

在講is和這兩種運算子區別之前,首先要知道python中物件包含的三個基本要素,分別是:id(身份標識)、type(資料型別)和value(值)。

is和==都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪。

==比較操作符和is同一性運算子區別

==是python標準操作符中的比較操作符,用來比較判斷兩個物件的value(值)是否相等,例如下面兩個字串間的比較:

1.>>> a = 『hello』

2.>>> b = 『hello』

3.>>> a == b

4.true

is也被叫做同一性運算子,這個運算子比較判斷的是物件間的唯一身份標識,也就是id是否相同。通過對下面幾個list間的比較,你就會明白is同一性運算子的工作原理:

>>> x = y = [4,5,6]

>>> z = [4,5,6]

>>> x == y

true

>>> x == z

true

>>> x is y

true

>>> x is z

false

>>>

>>> print id(x)

3075326572

>>> print id(y)

3075326572

>>> print id(z)

3075328140

x、y和z的值是相同的,所以前兩個是true沒有問題。至於最後乙個為什麼是false,看看三個物件的id分別是什麼就會明白了。

二、拷貝

淺拷貝:只拷貝頂級的物件,或者說:父級物件

深拷貝:通過遞迴方法來拷貝所有物件,頂級物件及其巢狀物件。或者說:父級物件及其子物件。

下面的例子就是在只有一層物件的時候,淺拷貝,深拷貝,和賦值=

import copy

d=a1=copy.copy(d)

a2 = copy.deepcopy(d)

d[「age」]=20

a1

a2

d

a = [1,2,3,4]

b1 = copy.copy(a)

b2 = copy.deepcopy(a)

a[3]=5

b1[1, 2, 3, 4]

b2

[1, 2, 3, 4]

#列表這類可變物件與字典同理

a

[1, 2, 3, 5]

b = a

a[3] = 6

b[1, 2, 3, 6]

a

[1, 2, 3, 6]

#但是賦值語句對於可變物件就不一樣了,當原始檔改變的時候,因為賦值只是複製了引用,所以b也會變化

c = 3

d = c

c = 4d3

c

4

於是我們得到結論:

①深淺拷貝都是對源物件的複製,占用不同的記憶體空間

②如果源物件只有一級目錄的話,源做任何改動,不影響深淺拷貝物件

③如果源物件不止一級目錄的話,源做任何改動,都要影響淺拷貝,但不影響深拷貝

④序列物件的切片其實是淺拷貝,即只拷貝頂級的物件

Python高階 深淺拷貝

python高階 深淺拷貝 深淺拷貝 1 深拷貝 深拷貝就是將所有的都進行拷貝,包括內層,深拷貝屬於遞迴拷貝,很是耗費記憶體。2 淺拷貝 淺拷貝就是只拷貝最外面一層,子物件會受到原始資料的影響,但是前拷貝節約記憶體,浪費少。3 物件的拷貝 引用傳遞不是拷貝,引用傳遞是位址的拷貝。4 拷貝格式 匯入模...

Python高階 深淺拷貝

定義 對於乙個物件的頂層拷貝 拷貝引用,不拷貝資料 對於 不可 變型別 number string tuple,淺複製僅僅是位址指向,不會開闢新空間 對於 可 變型別 list dictionary set,淺複製會開闢新的空間位址 僅僅是最頂層開闢了新的空間,裡層的元素位址還是一樣的 進行淺拷貝 ...

python高階 深淺拷貝 16

淺拷貝是對乙個物件的頂層拷貝,通俗地講就是 拷貝了引用,並沒有拷貝內容。a 1,2,3 print id a b aprint b print id b print a print b 執行結果為 1965053928072 1,2,3 1965053928072 1,2,3,4 1,2,3,4 深...