數(shù)據(jù)結(jié)構(gòu)與可變性
| 數(shù)據(jù)結(jié)構(gòu) | 可變性 | 構(gòu)造函數(shù)/類(lèi)型裝換函數(shù) |
|---|---|---|
| 數(shù)字 | 不可變 | float/int |
| 字符串 | 不可變 | str/' ' " " ''' ''' |
| 列表 | 可變 | list/[ ] |
| 元組 | 不可變 | tuple/( ) |
| 字典 | 可變 | dict/{ key:value} |
| 集合 | 可變 | set/{value} |
可變性:創(chuàng)建后就不能改變,無(wú)法在原處修改,不可變對(duì)象的修改是返回一個(gè)新對(duì)象
利用類(lèi)型轉(zhuǎn)換函數(shù)進(jìn)行列表去重
L1=[1,2,3,3,4,4,5,5,5]
L1=list(set(L1))
[1,2,3,4,5]
Python動(dòng)態(tài)類(lèi)型語(yǔ)言
動(dòng)態(tài)類(lèi)型語(yǔ)言的核心是:類(lèi)型沒(méi)有記錄在變量名中,而是記錄在被引用的對(duì)象中(正好與C語(yǔ)言、C++語(yǔ)言相反)。類(lèi)型的變換只是讓變量名引用了不同的對(duì)象而已。
可變對(duì)象與共享引用
由于可變對(duì)象支持在原處修改,因此會(huì)出現(xiàn)共享引用,相互影響的問(wèn)題
L1=[1,2,3,4]
L2=L1
L1 is L2 # True
L1[0]=2
print(L1) #[2,2,3,4]
print(L2) #[2,2,3,4]
不可變對(duì)象不會(huì)有以上共享引用的問(wèn)題,因?yàn)樗匈x值和改變都返回源對(duì)象的拷貝。
若想消除可變對(duì)象的共享引用問(wèn)題,可用如下兩種賦值方式
#采用分片方式
L1=[1,2,3,4]
L2=L1[:]
L1 is L2 # False
#使用拷貝模塊
import copy
x=copy.copy(y)
x=copy.deepcopy(y)
索引與分片
分片是左閉右開(kāi)區(qū)間 [ ),第三個(gè)參數(shù)為步長(zhǎng)
負(fù)數(shù)下標(biāo)索引表示倒序
一條簡(jiǎn)明法則
可用于多種類(lèi)型的通用型操作都是以?xún)?nèi)置函數(shù)或表達(dá)式的形式出現(xiàn)的(例如len(),list()),但是類(lèi)型特定的操作是以方法調(diào)用的形式出現(xiàn)的(例如aString.upper())
元組
1.元組具有不可變性,是一個(gè)常數(shù)生命,但可以與列表轉(zhuǎn)換
2.單個(gè)列表的元組要加逗號(hào)
3.元組的括號(hào)可以省略,因此有些看似是多個(gè)賦值或返回的語(yǔ)句實(shí)際是元組賦值
t=(34,) #tuple t has only one element
def func(a,b,c):
a,b,c=1,2,3 #(a,b,c)=(1,2,3)
return a,b,c # return (a,b,c)
布爾類(lèi)型
| 對(duì)象 | 值 |
|---|---|
| "spam" | True |
| "" | False |
| [] | False |
| {} | False |
| 1 | True |
| 0.0 | False |
| None | False |
True與False不過(guò)是整數(shù)1和0以不同形式顯示后的定制版本而已,只是作為關(guān)鍵字顯示而已