day7数据类型的小缺陷、集合增删改查,深浅copy

day7内容总结

  1.  元组,列表,字典的小缺陷
  2. 集合的增删查,以及其他方法
  3. 各种数据类型的转化,集合的操作
  4. 深浅copy

1.元组

  元组只有一个元素时,”元组“的数据类型以该元素为准,如果不是元组数据,则可修改

  tu = ([1,2,3]),

  print(tu)#tu是列表数据类型

  解决方法:加逗号tu =([1,2,3],)

  列表用索引迭代循环(可以用for循环时没有影响)时,最好不要修改列表长度,改变长度会改变索引,会影响结果或报错

  如删除列表中索引为奇数的数据,

  解决方法:不用循环del切片删除,用循环按索引从后往前删除,for i in range(len(li)-1,-1,-2)注意加反向步长

  字典迭代循环自身或循环dict.key().dict.values(),dict.items()时最好也不要改变改变字典长度,会影响结果或报错

  解决方法:将keys(),values(),items()通过list()括起来改为列表,循环列表的同时,对字典的的值进行修改

2.集合的增删查以及其他方法

  集合:存放无序的不重复的数据,集合本身是不可哈希,可变的类型,但只能存放不可变可哈希的数据类型(int,bool,str,tuple)

  主要用于除重(将列表转化为集合,去掉里面的重复元素,再将集合转化为列表),和判断集合关系,集合和字典都是用{},空{}表示字典,创建空集合要用set()方法,set1 = set()

  增:add()方法,set.add()方法,

  update()方法.set.update(可迭代对象),将对象迭代添加进集合

  删:按元素删,remove(元素),

  随机删除pop()有返回值,返回被随机删除的数据

  clear()清空集合

  del set1内存级别删除

  查:for循环遍历

  其他方法:frozenset(可迭代对象)方法,用可迭代对象创建一个新集合,冻结为不可变的frozenset类型的数据

  s1 = frozeset("abc"),print(s1),#结果显示为:frozenset({"a","b","c"})

3.各种数据类型的转化,集合的操作

 元组,列表,集合,可以通过list(),tuple(),set()括起来任意转化

  元组,列表,集合,不可转化为字典

  字典可以转化为元组,列表,集合,只提取key值

  字典,元组,列表转化为集合时必须时不可变可哈希的数据类型,转化为集合后自动去掉重复元素,再转回时不会恢复

  元组,字典,列表,集合,字符串都是可迭代对象,可通过可迭代对象进行多变量赋值,其中字符串赋值的数据类型只能是字符串

 

  集合

  交集,用&表示

  并集,用|表示

  差集,-,set1-set2,除掉set1中的两个集合的交集

  反交集,用^表示,两集合的并集除掉两集合的交集

  子集、超集的判断方法

  <,issubset()方法

  >,issuperset()方法

4.=与深浅copy

  变量1=变量2,变量1,2指向相同内存地址,修改一个,另一个随之变化

  变量1 = value,变量2 = value,有小数据池的指向相同内存地址,没小数据池的指向不同的内存地址

  小数据池,为节省内存,将部分整型的字符串型数据划入小数据池,小数据池的数据,值相等时共用一个内存地址

  整型:-5到256

  字符串类型:两种,字母和数字的任意组合有小数据池,有特殊字符的没有小数据池

  单个字母*n,n<=20时有小数据池

  

  浅copy(元组,列表,字典,集合)

  浅copy第一层指向不同的内存地址,复制当前值,第二层及更深层,指向相同的内存地址,保持一致性,修改第一层时不会随之变化,第二层往下会随之变化

  深copy,两个数据完全独立,互不影响,deepcopy需要引入copy模块,写法如下

  import copy

  l1 = [1,2,3,4]

  l2 = copy.deepcopy(l1)

  print(l2)

  

 

  

  

 

posted @ 2018-05-07 21:11  dmyHero  阅读(112)  评论(0)    收藏  举报