python 第二章 對象與類型

可變對象和不可變對象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')
相關文章
相關標籤/搜索