深拷貝 淺拷貝 資料型別

2021-08-06 07:42:57 字數 1246 閱讀 1029

(1)不可變型別

包括數值、字串、元組

不可變指的是不能改變引用,只能放置乙個新的引用

(2)可變型別

包括列表和字典

可變指的是當向列表或字典裡面增刪改時,引用沒有受到影響

進一步解釋可變與不可變,是指記憶體中的那塊內容(value)是否可以被改變。如果是不可變型別,在對物件本身操作的時候,必須在記憶體中新申請一塊區域(因為老區域是不可變的)。如果是可變型別,對物件操作的時候,不需要再在其他地方申請記憶體,只需要在此物件後面連續申請(-/+)即可,也就是它的address會保持不變,但區域會變長或者變短。

可以使用內建函式id()來確定物件的身份在兩次賦值前後是否發生了變化。

不可變型別有什麼好處?

如果資料是不可變型別,當我們把資料傳給乙個不了解的api時,可以確保我們的資料不會被修改。如果我們要操作乙個從函式返回的元組,可以通過內建函式list()把它轉換成乙個列表。(當被問到列表和元組的區別時,可以說這一點!)深淺拷貝都需要匯入copy包:

import copy
(類似「複製貼上」操作)

層層拷貝,只拷貝內容,沒有拷貝引用,意思是說把內容拷貝到乙個新的引用,而不占用原來的引用

a = [1,2,3,[4,5,6]]

b = copy.deepcopy(a)

b[1,2,3,[4,5,6]]

a[1,2,3,[4,5,6],7]

b[1,2,3,[4,5,6],8]

b[1,2,3,[4,5,6,9],8]

a[1,2,3,[4,5,6],7]

對最外層的拷貝,只拷貝引用,並沒有拷貝內容,這也分資料型別的不同

1)可變型別:相當於深拷貝。拷貝一次的時候,將內容拷貝走了,放到乙個新的容器去了

c = [1,2,3,4]

d = copy.copy(c)

d[1,2,3,4]

id(c)

140266298283792

id(d)

140266297846672

2)不可變型別:拷貝引用,沒有拷貝內容
e = '1234'

f = copy.copy(e)

id(e)

140266298318544

id(f)

140266298318544

集合資料型別,拷貝,深拷貝,淺拷貝

用 中間值用,隔開,且集合中元素排列是無序的,而且如果有相同元素會只保留乙個 1.必須掌握 1.長度len set 1 print len set 1 52.成員運算in和not in 表示判斷集合裡面是否有某個值 set 1 print 1 in set 1 true print 100 in s...

js資料型別賦值,淺拷貝,深拷貝

直接上 是我的風格基本資料型別的賦值 var a 10 var b a b 24 console.log a 10 a不受b的影響。console.log b 24 基本資料型別賦值時。是copy乙份10的值。當b 24時。a不受b的影響。複製 複雜資料型別的賦值 var obj var obj1 ...

引用資料型別的淺拷貝與深拷貝

基本的資料型別可以分為兩類 基本資料型別 值型別 數字 字串 布林值 undefined null 引用資料型別 引用型別 函式 陣列 物件 只有複雜資料型別 引用資料型別 才有淺拷貝與深拷貝 基本資料型別資料傳遞後,在改變源資料後面不會改變 基本資料型別存的是值 引用資料型別存的是位址 引用資料型...