python 第二章 物件與型別
阿新 • • 發佈:2018-12-21
可變物件和不可變物件
1,可變物件,list(列表),dict(字典),集合(set),位元組陣列。
2,不可變物件,數值型別,字串,位元組串,元組(具體形式 ())。
注意條件:可變和不可變指的是該物件指向的記憶體是否可以改變。當修改不可變物件的時候,它會重新複製一份,然後再改變相應的值,原來的那一分就會相當與垃圾被去除。
>>> 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,不可變物件之間的改變不會互相影響
>>> 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]
我覺得這個地方恰好解釋了可變物件和不可變物件之間的區別,可變物件直接改變的是地址,所以指向這個地址的量對應的會發生改變,而不可變物件“修改”的原理是新開闢一段記憶體,把原來的內容複製過來,然後再進行相應的改變。
數字整數型別
十進位制,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')