(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 引用資料型別 引用型別 函式 陣列 物件 只有複雜資料型別 引用資料型別 才有淺拷貝與深拷貝 基本資料型別資料傳遞後,在改變源資料後面不會改變 基本資料型別存的是值 引用資料型別存的是位址 引用資料型...