1. 程式人生 > >python 第二章 物件與型別

python 第二章 物件與型別

可變物件和不可變物件

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')