python學習筆記 (六)深copy 淺copy

2022-08-11 19:09:19 字數 1440 閱讀 8161

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用。

賦值其實只是傳遞物件引用,引用物件id是一樣的。原始列表改變,被賦值的b也會做相同的改變。

alist = [1,2,3,["a","b"]]

b = alist

print(b)

>>>[1, 2, 3, ['a', 'b']]

print(alist)

>>>[1, 2, 3, ['a', 'b'], 5]

print(b)

>>>[1, 2, 3, ['a', 'b'], 5]

淺拷貝是指拷貝的只是原始物件元素的引用,換句話說,淺拷貝產生的物件本身是新的,但是它的內容不是新的,只是對原物件的乙個引用。

>>> import copy

>>> alist=[1,2,3,["a","b"]]

>>> c = copy.copy(alist)

>>> print(alist);print(c)

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]

>>> print(alist);print(c)

[1, 2, 3, ['a', 'b'], 5]

[1, 2, 3, ['a', 'b']]

>>> alist[3]

['a', 'b']

>>> print(alist);print(c)

[1, 2, 3, ['a', 'b', 'cccc'], 5]

[1, 2, 3, ['a', 'b', 'cccc']] #裡面的子物件被改變了

淺copy的幾種方式:

深拷貝是指完全拷貝原始物件,而且產生的物件是新的,並且不受其他引用物件的操作影響。

深copy:

names2 =copy.deepcopy(names)

>>> import copy

>>> alist=[1,2,3,["a","b"]]

>>> d=copy.deepcopy(alist)

>>> print(alist);print(d)

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]始終沒有改變

>>> print(alist);print(d)

[1, 2, 3, ['a', 'b'], 5]

[1, 2, 3, ['a', 'b']]始終沒有改變

>>> alist[3]

['a', 'b']

>>> print(alist);print(d)

[1, 2, 3, ['a', 'b', 'ccccc'], 5]

[1, 2, 3, ['a', 'b']] 始終沒有改變

Python學習筆記(六)

函式 呼叫python內建的函式,可以通過 help fun 進行查詢。舉例 abs x 求x絕對值 cmp x,y 比較兩個數大小,如果 xy,返回 1。int x 把其他資料型別轉換為整數,包括字串型別。str 把其他型別轉換成 str。編寫函式 def my abs x if x 0 retu...

Python學習筆記(六)

函式練習題 1 寫函式,檢查傳入字典的每乙個value的長度,如果大於2,那麼僅保留前兩個長度的內容,並將新內容返回給呼叫者。dic def dict func dic for key,value in dic.items if len value 2 value value 0 2 dic key...

Python學習筆記六

python課堂筆記六 常用模組已經可以在單位實際專案中使用,可以實現運維自動化。無需手工備份檔案,資料庫,拷貝,壓縮。常用模組 time模組 time.time time.localtime time.strftime os模組 主要針對作業系統的一些方法,如 切換目錄 sys模組 跟python...