數(shù)據(jù)結(jié)構(gòu)與可變性
數(shù)據(jù)結(jié)構(gòu) | 可變性 | 構(gòu)造函數(shù)/類型裝換函數(shù) |
---|---|---|
數(shù)字 | 不可變 | float/int |
字符串 | 不可變 | str/' ' " " ''' ''' |
列表 | 可變 | list/[ ] |
元組 | 不可變 | tuple/( ) |
字典 | 可變 | dict/{ key:value} |
集合 | 可變 | set/{value} |
可變性:創(chuàng)建后就不能改變,無法在原處修改牙丽,不可變對象的修改是返回一個新對象
利用類型轉(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動態(tài)類型語言
動態(tài)類型語言的核心是:類型沒有記錄在變量名中薛窥,而是記錄在被引用的對象中(正好與C語言熟呛、C++語言相反)悔耘。類型的變換只是讓變量名引用了不同的對象而已暇矫。
可變對象與共享引用
由于可變對象支持在原處修改鄙才,因此會出現(xià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]
不可變對象不會有以上共享引用的問題,因為所有賦值和改變都返回源對象的拷貝攒庵。
若想消除可變對象的共享引用問題嘴纺,可用如下兩種賦值方式
#采用分片方式
L1=[1,2,3,4]
L2=L1[:]
L1 is L2 # False
#使用拷貝模塊
import copy
x=copy.copy(y)
x=copy.deepcopy(y)
索引與分片
分片是左閉右開區(qū)間 [ ),第三個參數(shù)為步長
負(fù)數(shù)下標(biāo)索引表示倒序
一條簡明法則
可用于多種類型的通用型操作都是以內(nèi)置函數(shù)或表達(dá)式的形式出現(xiàn)的(例如len(),list())浓冒,但是類型特定的操作是以方法調(diào)用的形式出現(xiàn)的(例如aString.upper())
元組
1.元組具有不可變性栽渴,是一個常數(shù)生命,但可以與列表轉(zhuǎn)換
2.單個列表的元組要加逗號
3.元組的括號可以省略稳懒,因此有些看似是多個賦值或返回的語句實際是元組賦值
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)
布爾類型
對象 | 值 |
---|---|
"spam" | True |
"" | False |
[] | False |
{} | False |
1 | True |
0.0 | False |
None | False |
True與False不過是整數(shù)1和0以不同形式顯示后的定制版本而已闲擦,只是作為關(guān)鍵字顯示而已