可變對象和不可變對象python
1,可變對象,list(列表),dict(字典),集合(set),字節數組。數組
2,不可變對象,數值類型,字符串,字節串,元組(具體形式 ())。app
注意條件:可變和不可變指的是該對象指向的內存是否能夠改變。當修改不可變對象的時候,它會從新複製一份,而後再改變相應的值,原來的那一分就會至關與垃圾被去除。ide
>>> print(id(aee)) 140375930246848 >>> aee+= () >>> print(id(aee))// 加了一個空元素以後,元祖的地址改變了。 140375898807608
>>> stra= '12' >>> print(id(stra)) 140375899220376 >>> stra+= '' >>> print(stra) 12 >>> print(id(stra))// 加了一個空字符的時候,字符串的地址並無被改變。 int同理。可是float的話,會有精度問題 140375899220376
變量與對象的關係(多個變量共享引用同一對象)函數
1,不可變對象之間的改變不會互相影響ui
>>> a=1 >>> print(a) 1 >>> b=a >>> print(b) 1 >>> b=2 >>> print(b) 2 >>> print(a) 1
2,可變對象之間的改變會相互影響編碼
>>> a=[1,23,4] >>> print(a) [1, 23, 4] >>> b=a >>> print(b) [1, 23, 4] >>> b.append(188) >>> print(b) [1, 23, 4, 188] >>> print(a) [1, 23, 4, 188]
我以爲這個地方剛好解釋了可變對象和不可變對象之間的區別,可變對象直接改變的是地址,因此指向這個地址的量對應的會發生改變,而不可變對象「修改」的原理是新開闢一段內存,把原來的內容複製過來,而後再進行相應的改變。code
數字整數類型對象
十進制,1,23等等索引
十六進制,0X或者0x開頭。
八進制,0O開頭。
二進制,0B開頭。
int不受位數的限制,只收內存的限制。
字符串(python中只接受unicode編碼)
索引,切片
索引是取出一個字符,切片是取出一片字符。
>>> s="huangqingxiang" >>> len(s) 14 >>> s[0]// 從第0位開始,長度是14的話,最後一位的編號爲13 'h' >>> s[-14]// 若是是從右邊開始數的話,開始爲-1 'h' >>> [-1] [-1] >>> s[-1] 'g' >>> s[13] 'g' >>> s[14] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>> s[5:8]//截取從編號爲5的字符串到第7位中止,左必右開 'qin' >>> s[5:]//從編號爲5的開始日後全部的字符串都截取出來 'qingxiang' >>> s 'huangqingxiang'
單個字符的字符串問題
>>> s='A' >>> ord(s)//當前字符的ascii編碼,ord是獲得當前字符串的Unicode編碼 65 >>> chr(s) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: an integer is required (got type str) >>> chr(65)//ascii編碼對應的字母 'A'
對encode()函數和decode()函數的初級理解
字面意思,encode指的是編碼,decode指的是解碼
>>> u='s' >>> s1=u.encode('gb2312')//這裏的gb2312指的是一種編碼方式,得到bytes類型的類型對象 >>> s1 b's' >>> s2=s1.decode('gb2312') >>> s2 's'
字節串(不可變對象)
字節串相似於字符串,能夠進行鏈接,重複運算。可是字節串是由單個字節組成的串,他的值是不可顯示的代碼,因此字節串是二進制數據,字符串值是文本數據序列。具體形式,數據的開始是以字母’b'或者‘B'開始,以單,雙引號個三引號引發來的字節串。’
>>> x=b'\xff\xf1\x01' >>> type(x) <class 'bytes'> >>> x=B'\xff\xf1\x01' >>> type(x) <class 'bytes'> >>> x=bytes(10) >>> x b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
字節數組
>>> bytearray() bytearray(b'') >>> x=bytearray(10) >>> x bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')