python序列類型的實現(xiàn)示例
序列類型(Sequence Types)可變序列不可變序列collections.abc
一、序列類型的分類
1. 不可變序列(Immutable Sequences)
創(chuàng)建后無法修改元素的序列,核心類型包括:
str:字符串(Unicode字符序列)tuple:元組(異構(gòu)元素序列)bytes:字節(jié)序列(不可變)range:整數(shù)范圍序列(動態(tài)生成,不可變)
2. 可變序列(Mutable Sequences)
創(chuàng)建后可修改元素的序列,核心類型包括:
list:列表(異構(gòu)元素序列)bytearray:字節(jié)數(shù)組(可變字節(jié)序列)array.array:數(shù)組(同構(gòu)數(shù)值序列,需導入array模塊)collections.deque:雙端隊列(高效增刪的可變序列)
二、序列類型的繼承關(guān)系(基于抽象基類)
Python通過collections.abc模塊定義抽象基類(ABC),規(guī)定序列類型的接口標準,具體類型繼承或?qū)崿F(xiàn)這些抽象基類的方法。
核心抽象基類層級
Iterable(可迭代)
↓
Collection(集合,Python 3.6+)
↓
Sequence(序列)
├── MutableSequence(可變序列)
└── ImmutableSequence(不可變序列,Python 3.3+)
各抽象基類的關(guān)鍵方法
| 抽象基類 | 核心方法/特性 |
|---|---|
| Iterable | 需實現(xiàn)__iter__(),支持for循環(huán)迭代 |
| Collection | 繼承Iterable+Sized(__len__())+Container(__contains__()) |
| Sequence | 繼承Collection,需實現(xiàn)__getitem__()和__len__(),支持索引、切片、index()、count() |
| ImmutableSequence | 繼承Sequence,無修改方法(如__setitem__()) |
| MutableSequence | 繼承Sequence,需實現(xiàn)__setitem__()、__delitem__()、append()等修改方法 |
具體類型的繼承實現(xiàn)
不可變序列類型:
str、tuple、bytes、range 均實現(xiàn) ImmutableSequence 接口(或直接繼承Sequence并禁用修改方法)。
例如,tuple 繼承關(guān)系:tuple → Sequence → Collection → Iterable。可變序列類型:
list、bytearray、array.array、collections.deque 均實現(xiàn) MutableSequence 接口。
例如,list 繼承關(guān)系:list → MutableSequence → Sequence → Collection → Iterable。
三、序列類型的共性與差異
共性(所有序列)
- 支持索引訪問:seq[index]
- 支持切片:seq[start:end:step]
- 支持長度計算:len(seq)
- 支持成員判斷:x in seq
- 支持拼接:seq1 + seq2(不可變序列拼接生成新對象,可變序列可原地擴展)
- 支持重復:seq * n
差異
| 特性 | 不可變序列(如tuple/str) | 可變序列(如list/deque) |
|---|---|---|
| 元素修改 | 不支持(seq[index] = x報錯) | 支持 |
| 原地操作 | 無(如append()/pop()) | 支持 |
| 內(nèi)存效率 | 更高(固定大?。?/td> | 較低(動態(tài)擴容) |
| 哈希性 | 可哈希(可作為字典鍵) | 不可哈希 |
四、自定義序列類型
通過繼承抽象基類(如Sequence或MutableSequence),可快速實現(xiàn)自定義序列,只需重寫必要方法:
from collections.abc import MutableSequence
class MyList(MutableSequence):
def __init__(self, data):
self.data = list(data)
def __getitem__(self, index):
return self.data[index]
def __setitem__(self, index, value):
self.data[index] = value
def __delitem__(self, index):
del self.data[index]
def __len__(self):
return len(self.data)
def insert(self, index, value):
self.data.insert(index, value)
# 使用自定義序列
ml = MyList([1,2,3])
ml.append(4) # 繼承MutableSequence的方法
print(ml[2]) # 輸出3
總結(jié)
Python序列類型以抽象基類為骨架,分為不可變和可變兩類:
- 不可變序列:str/tuple/bytes/range,繼承ImmutableSequence;
- 可變序列:list/bytearray/deque/array,繼承MutableSequence。
這種設計既保證了接口一致性,又通過抽象基類明確了不同序列的行為約束。
到此這篇關(guān)于python序列類型的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)python序列類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
?python中pandas讀取csv文件?時如何省去csv.reader()操作指定列步驟
這篇文章主要介紹了?python中pandas讀取csv文件?時如何省去csv.reader()操作指定列步驟,對正在工作的你可能有一定的幫助,需要的朋友可以參考一下2022-01-01
python?PyAutoGUI實現(xiàn)自動化鼠標鍵盤等常用操作
這篇文章主要介紹了python?PyAutoGUI實現(xiàn)自動化鼠標鍵盤等常用操作使用實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
python數(shù)學模塊(math/decimal模塊)
這篇文章主要介紹了python數(shù)學模塊(math/decimal模塊),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
python使用PythonMagick將jpg圖片轉(zhuǎn)換成ico圖片的方法
這篇文章主要介紹了python使用PythonMagick將jpg圖片轉(zhuǎn)換成ico圖片的方法,涉及PythonMagick模塊操作圖片的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03

