国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

2015/9/2Python基礎(7):元組

2019-11-14 17:01:58
字體:
來源:轉載
供稿:網(wǎng)友

為什么要創(chuàng)造一個和列表差別不大的容器類型?
元組和列表看起來不同的一點是元組用圓括號而列表用方括號。而最重要的是,元組是不可變類型。這就保證了元組的安全性。
創(chuàng)造元組給它賦值和列表完全一樣。除了一個元素的元組要在元組分割符里加一個逗號以防跟普通的分組操作符混淆。

>>> aTuple = (1)>>> aTuple1>>> aTuple = (1,)>>> aTuple(1,)

 

訪問元組的值和列表也一樣。
更新元組和更新字符串一樣,要再構造一個新字符串,刪除一個單獨的元組元素以不可能的。只能顯式地刪除一整個元組,當然我們并不需要這么做。

元組和列表一樣也沒有自己專用的運算符和內(nèi)建函數(shù)。因為元組本身是不可變的,所以這些操作對元組來說就是多余的,沒有什么意義。

元組的特殊特性

元組的不可變導致我們不能改變其中的一個或多個元素,這樣在我們傳遞數(shù)據(jù)給一個不了解的API時,可以保證我們的數(shù)據(jù)不會被修改。
而當我們需要操作從一個函數(shù)返回的元組時,可以用list()函數(shù)把它轉換成一個列表。
元組的不可變也不是那么的不可變,我們可以像操作字符串一樣連接、重復等等操作。還有是,雖然元組對象本身是不可變的,但是不代表它包含的可變對象是不可變的,比如說元組里存在數(shù)組:

>>> t = (['xyz', 123], 23, -103.4)>>> t(['xyz', 123], 23, -103.4)>>> t[0][1]123>>> t[0][1] = ['abc', 'def']>>> t(['xyz', ['abc', 'def']], 23, -103.4)

 

所有的多對象的,逗號分隔的,沒有明確用符號定義的等等這些集合的默認類型都是元組。

>>> 'abc', -4.24e93, 18+6.6j, 'xyz'('abc', -4.24e+093, (18+6.6j), 'xyz')>>>>>> x, y = 1, 2>>> x, y(1, 2)

 

同樣的,所有函數(shù)返回的多對象,不包括有符號封裝的,都是元組。

作為字典的關鍵字
不可變對象的值不可變,意味著通過hash算法得到的值總是一個值。這是作為字典鍵值的必要條件。

拷貝Python對象
淺拷貝和深拷貝
淺拷貝的意思是創(chuàng)建一個和原對象一樣的對象類型,其內(nèi)容是原對象的引用。如下:

>>> person = ['name', ['savings', 100.0]]>>> hubby = person[:]>>> origin = ['abc',['def',12.3]]>>> copy1 = origin[:]>>> copy2 = list(origin)>>> [id(x) for x in origin, copy1, copy2][47106648, 47107008, 47104328]>>> [id(x) for x in origin[0], copy1[0], copy2[0]][4172448, 4172448, 4172448]

 

而因為我們是在淺拷貝,改變其中一份拷貝并不會影響另一份

>>> copy1[0] = 'change'>>> copy1['change', ['def', 12.3]]>>> copy2['abc', ['def', 12.3]]


與之相對的就是深拷貝:

>>> origin = ['abc',['def',12.3]]>>> copy1 = origin>>> copy2 = origin>>> copy1[0] = 'change'>>> copy1['change', ['def', 12.3]]>>> copy2['change', ['def', 12.3]]

 

深拷貝的id指向了同樣的量

>>> [id(x) for x in origin, copy1, copy2][47106648, 47106648, 47106648]

 

深淺拷貝還可以通過copy模塊里的函數(shù)實現(xiàn),copy.copy()是淺拷貝,copy.deepcopy()是深拷貝。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精河县| 成安县| 永丰县| 千阳县| 大安市| 门头沟区| 淮南市| 峨眉山市| 奇台县| 改则县| 三台县| 娱乐| 宜城市| 临清市| 星子县| 永清县| 江山市| 玉龙| 申扎县| 伊金霍洛旗| 临漳县| 延寿县| 瑞昌市| 吉安市| 缙云县| 交口县| 抚远县| 封丘县| 光山县| 石渠县| 浦北县| 大竹县| 孟津县| 双辽市| 米泉市| 汪清县| 南陵县| 手游| 汪清县| 莫力| 安达市|