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

 

posted @ 2018-11-14 11:58  Let_Life_Stop  阅读(196)  评论(0编辑  收藏  举报