<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
不可變資料型別在第一次宣告賦值宣告的時候, 會在記憶體中開闢一塊空間, 用來存放這個變數被賦的值, 而這個變數實際上儲存的, 並不是被賦予的這個值, 而是存放這個值所在空間的記憶體地址, 通過這個地址, 變數就可以在記憶體中取出資料了. 所謂不可變就是說, 我們不能改變這個資料在記憶體中的值, 所以當我們改變這個變數的賦值時, 只是在記憶體中重新開闢了一塊空間, 將這一條新的資料存放在這一個新的記憶體地址裡, 而原來的那個變數就不在參照原資料的記憶體地址而轉為參照新資料的記憶體地址了.
舉例子:
>>> x = 18 >>> id(x) 4497811200 >>> id(18) 4497811200 >>> x = 19 >>> id(x) 4497811232 >>> id(18) 4497811200 >>> y = 18 >>> id(y) 4497811200 >>>
一開始x = 18,開闢一塊地址為4497811200的記憶體,即18對應的地址為4497811200,後來x = 19 ,重新開闢一塊地址為4497811232的記憶體來放19,可以看到不變的意思是指18,和19在記憶體中的地址不會改變,將18賦值給y時,y指向的地址即為4497811200。
結合不可變資料型別,可變資料型別就很好理解來,可變資料型別是指變數所指向的記憶體地址處的值是可以被改變的。
>>> x = [1,2,3] >>> id(x) 4501838920 >>> y = [1,2,3] >>> z = [1,2,3] >>> id(y) 4501838600 >>> id(z) 4501838664
從另外一個角度來看:
可變型別:當該資料型別的對應變數的值發生了改變,那麼它對應的記憶體地址也會發生改變,對於這種資料型別,就稱不可變資料型別。
可變資料型別:當該資料型別的對應變數的值發生了改變,那麼它對應的記憶體地址不發生改變,對於這種資料型別,就稱可變資料型別。
#a的值改變了,a對應的記憶體地址也改變了 >>> a=1 >>> id(a) 4497810656 >>> a = 2 >>> id(2) 4497810688 #直接對a操作,相當於拷貝了一份a的值,在其他記憶體地址操作,a的值不變 >>> a+1 3 >>> id(a) 4497810688 >>> a 2 #b的值改變了,b對應的記憶體地址不變,第一次給b賦值的時候,給b劃分一塊記憶體空間,該空間就不變了 >>> b = [1,2,3] >>> id(b) 4501839496 #直接對b操作,b的值改變,b指向的記憶體空間不變 >>> b.append(4) >>> id(b) 4501839496 >>> b [1, 2, 3, 4] >>>
不可變:Number(數位)、String(字串)、Tuple(元組)。
#整型 a = 1 print(id(a), type(a)) a = 2 print(id(a), type(a)) # 4361254304 <class 'int'> # 4361254336 <class 'int'> #字串 b = 'anne' print(id(b),type(b)) b = 'anne1995' print(id(b),type(b)) # 4363638744 <class 'str'> # 4363684784 <class 'str'> #元組 c1 = ['1','2'] c = (1,2,c1) print(c,id(c),type(c)) c1[1] = 'djx' print(c,id(c),type(c)) # (1, 2, ['1', '2']) 4363948248 <class 'tuple'> # (1, 2, ['1', 'djx']) 4363948248 <class 'tuple'>
可以變:Set(集合)、List(列表)、Dictionary(字典)。
#集合 s = {1, 'd', '34', '1', 1} print(s, type(s), id(s)) s.add('djx') print(s, type(s), id(s)) # {1, '1', 'd', '34'} <class 'set'> 4401385256 # {1, '1', '34', 'd', 'djx'} <class 'set'> 4401385256 #列表 list = [1,'q','qwer',True] print(list,type(list),id(list)) list.append('djx') print(list,type(list),id(list)) # [1, 'q', 'qwer', True] <class 'list'> 4401113608 # [1, 'q', 'qwer', True, 'djx'] <class 'list'> 4401113608 #字典 tuple = (1) dic = {1:2} d = { tuple:1,'key2':'djx','key3':'li'} print(d,type(d),id(d)) d['key4'] = 'haha' print(d,type(d),id(d)) # {1: 1, 'key2': 'djx', 'key3': 'li'} <class 'dict'> 4401075976 # {1: 1, 'key2': 'djx', 'key3': 'li', 'key4': 'haha'} <class 'dict'> 4401075976
注意:此時元組的值發生了變化而記憶體地址沒變,但我們依然稱元組為不可變型別,為什麼呢?其實改的是元組中的列表,列表是可變型別,改變了值後地址依然不變。但是元組的定義就是不可變的,
元組被稱為唯讀列表,即資料可以被查詢,但不能被修改。
以上就是python資料型別可變與不可變深入分析的詳細內容,更多關於python可變不可變資料型別的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45