数据类型
引用计数
如果一个变量的引用计数为0,那么就会被python的垃圾回收机制自动回收
id和值
1  | id相等,值一定相等: 值相等,但id不一定相等(存放值的内存空间相同则值一定相同,值相同但是存放值的内存空间不一定相同)  | 
字符串
索引,
切片(顾头不顾尾,步长),
len,成员运算(in和not in),
循环 for ,
方法(strip split lower upper startswith endswith join index 迭代** replace (第一个参数为指定的值,第二个参数 为自己添加的值,第三个参数是选择替换几个(默认是全部替换)) )
isdigit:判断字符串里是不是数字
isalnum:判断是不是为字母或数字
isalpha:判断是不是字母组成
islower:判断是不是全小写组成
isupper:判断是不是全大写组成
center:输出结果时可以在左右两边添加符号,第一个参数是多宽,第二个参数是以什么符号
常用操作和内置方法
    按索引取值
    切片,顾头不顾尾,步长,切片出的字符串是一个全新的字符串,不改变原字符串
    长度len()
    成员运算in和not in
    去掉字符串左右两边的字符,strip,不管中间的
    切分split,针对按照某种分割符组织的字符串,可以切分成列表,进而进行取值
    可以for循环出每个字符
    strip,lstrip,rstrip
    lower()变成小写
    upper()全变成大写
    startswith()判断是否以什么开头
    endswith()判断是否以什么结尾
    format格式化操作
    rsplit反相切分,可以设置切分个数
    join字符串拼接
    replace替换
    isdigit判断是否纯数字
    find找到返回第一个字符的索引位置,否则返回-1
    center字符串居中
    ljust字符串左边添加符号
    rjust字符串右边添加符号
    zfill字符串居中 ,以0填充
    captalize首字母大写
    swapcase反转
    title 每个字符串开头首字母变成大写
    index()返回索引,不存在就报错
    isalpha字符串中包含的是字母或则中文字符
    isalnum字符串中包含的是字母或中文字符或数字
该类型总结
    存一个值
    有序
    不可变,可hash
格式三种方法:
重点
1  | 'my name is {} my age is {}'.format('egon',18)  | 
int–整型
bit_lenth 使用方法:用一个int型例如int后的n n.bit_length()
to_bytes 将数字转换成字节类型:6表示用多少个字节表示,little/big,用于指定生成字节的顺序 result=val.to_bytes(6,’little’)
from_bytes,将字节转换成数字
 result=b’\x02\x00\x00\x00\x00\x00’
 data=int.from_bytes(result,’little’)
 print(data)
bool–布尔类型
True/False
 False包括:0 {} [] () None
 True:有值或者成功可以是True
list–列表
按索引存取值(正向存取+反向存取):即可存也可以取
切片(顾头不顾尾,步长)
len
成员运算in和not in
循环 for
常用操作和内置方法
    按索引存取值,可存可取,只能根据已知索引去改值,索引不存在即报错
    切片,顾头不顾尾,步长
    长度len
    成员运算in 和 not in
    append追加,在列表末尾
    insert插入
    del删除
    remove指定要删除的值,返回None
    pop从列表中拿走一个值,返回那个值
    可以for循环遍历
    clear清空
    extend添加一个列表,放在列表末尾
    reverse反转列表,本身无返回值
    sort排序,默认从小往大
copy 深浅拷贝,深拷贝拷贝所有层,浅拷贝只拷贝一层*
 name=[1,2,3]
 name.copy()
 这是浅拷贝
 import copy
 li=[11,22]
 li2=copy.deepcopy(li)
 深拷贝
1  | ['alex', 'SB', 'wxx', 'lxx', 'egon', 4, 3.1]  | 
dict–字典
clear 同列表,字典内容全部清除
copy 同列表,深浅拷贝
fromkeys 可以生成字典
 val=dict.fromkeys([‘k1’,’k2’,’k3’],666)
 val[‘k1’]=999
 print(val)
 结果:{‘k1’:999,’k2’:666,’k3’:666}
 val=dict.fromkeys([‘k1’,’k2’,’k3’],[])
 val[‘k1’].append(666)
 val[‘k1’]=[1,2,3]
 print(val)
 结果:{‘k1’:[1,2,3],’k2’:[666],’k3’:[666]} 因为创建这个字典时候用的空列表是同一个内存地址的,而赋值后用了新的地址
get 获取值,按照key,如果没获取到还可以有默认值
pop 同列表,删除并获取删除的值
item 输出字典所有的键值对
keys 输出字典所有的key
popitem pop中制定了key,popitem出来的是元素类型
setdefault 添加 列表中有的就不错修改,没有的就添加
update 更新
 dic={‘k1’:’v1’,’k2’:’v2’}
 dic.update({‘k4’:’v4’,’k2’:’v5’})
 print(dic)
 结果:{‘k1’: ‘v1’, ‘k2’: ‘v5’, ‘k4’: ‘v4’}
set–集合
用途:关系运算,去重,集合的三大特性:
每一个值都必须是不可变的类型
,元素不能重复,
集合类元素无序
常用操作和内置方法
    交集:&
    并集:|
    差集:-
    对称差集:^
    是否相等:==
    父集:一个集合是包含另外一个集合,>=
    子集:一个集合是否在另一个集合中,<=
    update
    pop随机删除
    remove单纯的删除,返回值为None,当删除元素不存在就则报错
    discard,单纯的删除,返回值为None,当删除元素不存在不会报错
    isdisjoint当两个集合没有交集时返回True
该类型总结
    可以存多个值
    无序
    可变
    集合去重的局限性
        无法原数据类型的顺序
        只有集合中的元素全为不可变类型时,才可以用集合去重
其他
集合是有序的并且不可以重复的
names={‘鸣人’,’佐助’,’小樱’}
names.add(‘鸣人’)
即使现在又添加了一次鸣人,在集合中也不会出现
差集
names={‘鸣人’,’佐助’,’小樱’}
boys={‘鸣人’,’佐助’,’卡卡西’}
val=names.difference(boys)
names中存在,boys中不存在的数据,结果为’小樱’
val=boys.difference(names)
boys中存在,names中不存在数据,结果为’卡卡西’
difference_update**同differenc一样用法**
对称差集
names={‘鸣人’,’佐助’,’小樱’}
boys={‘鸣人’,’佐助’,’卡卡西’}
val=names.symmetric_difference(boys)
输出的是两个集合互不相同的,结果为{‘小樱’,’卡卡西’}
symmetric_difference_update方法使用方法同上
删除指定值
names={‘鸣人’,’佐助’,’小樱’}
names.discard(‘鸣人’)
结果:names={‘佐助’,’小樱’}
求交集*
names={‘鸣人’,’佐助’,’小樱’}
boys={‘鸣人’,’佐助’,’卡卡西’}
val=names.intersection(boys)
输出的是两个集合的交集,也就是两个集合都有的值。结果:{‘鸣人’,’佐助’}
intersection_update使用方法同上
并集*
names={‘鸣人’,’佐助’,’小樱’}
boys={‘鸣人’,’佐助’,’卡卡西’}
val=names.union(boys)
输出的是两个集合拥有的所有值,重复的值只输出一个。结果:{‘鸣人’,’佐助’,’小樱’,’卡卡西’}
判断是否无交集
names={‘鸣人’,’佐助’,’小樱’}**boys={‘鸣人’,’佐助’,’卡卡西’}val=names.isdisjoint(boys)有交集为False,无交集为True**
*子集父集
names={‘鸣人’,’佐助’,’小樱’}**boys={‘鸣人’,’佐助’,’卡卡西’}val=boys.issubset(names)判断是否是子集val=names.issuperset(boys)判断是否是父集**
*删除集合元素
names={‘鸣人’,’佐助’,’小樱’}**v=names.pop()同列表,取删除值names.remove(‘鸣人’)**names.discard(‘佐助’)
*更新
names={‘鸣人’,’佐助’,’小樱’}
boys={‘鸣人1’,’佐助1’,’卡卡西1’}
names.update(boys)
更新值,结果:{‘鸣人’,’佐助’,’小樱’,’鸣人1’,’佐助1’,’卡卡西1’}
元祖
用途:记录多个值,当多个值没有改的需求,此时元组更加适合
常用操作和内置方法
    按索引取值,只能取
    切片顾头不顾尾
    长度len
    成员运算in 和 not in
    可以for循环遍历
    count统计元素出现的次数
    index查看元素所在的索引位置,不存在就报错
类型总结
    可以存放多个值
    不可变
    有序
字典
用途:记录多个值,每一个值都有对应的key用来描述value
常用操作和内置方法
    按key取值可存可取
    长度len
    成员运算in 和 not in  判断的是key
    del 删除,不存在就报错
    pop删除,不存在就报错
    popitem删除字典第一个键值对
    keys
    values
    items
    可以for 循环遍历
    get存在返回value,不存在返回None
    update有则替换,无则添加
    setdefault有则不变,无则添加
该类型总结
    存多个值
    无序
    可变
1  | 1、数据类型  | 
可变类型:值变,id不变
    列表,字典,集合
不可变类型:值变,id也跟着变
    int,float,str,tuple
可以按照索引取值都是有序
    str,list,tuple
否则都是无序
    dict,set
只能存一个值的:
    int,float,str
可以存多个值的,(比喻为容器类型)
    list,tuple,dict,set
2、字符编码
    unicode:内存(不能改变)
        2bytes存一个字符
    上-------unicode--------》4e0a
    上<-------unicode--------4e0a
gbk:
    2bytes代表一个中文字符,1bytes代表一个英文字符
utf-8
    3bytes代表一个中文字符,1bytes代表一个英文字符
unicode-------编码encode---------》utf-8
unicode《-------解码decode---------utf-8
处理乱码问题,一个核心的思想:
    字符当初是以什么编码格式存的/编码就应该以什么编码方式解码
python3中
    str类型的值默认就是unicode编码的结果
    name='何'
    print(name)
    bytes:可以当成二进制去看
        name_bytes=name.encode('utf-8')
        name_bytes.decode(''utf-8')