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