码迷,mamicode.com
首页 > 其他好文 > 详细

four

时间:2017-10-27 21:27:35      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:内存   size   add   class   bar   重要   upd   并集   font   

一、集合

  集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但集合本身是不可哈希的(所以集合做不了字典的键)

  集合最重要的两点:

    1.去重,把一个列表变成集合,就自动去重了

    2.关系测试,测试两组数据之前的交集、并集、差集等关系

  1、集合的创建  

 set1 = set({1,2,barry})
 set2 = {1,2,barry}
 print(set1,set2)

   2、集合的增

  set1 = {‘alex‘, ‘wusir‘, ‘ritian‘,‘barry‘}
  set1.add(‘景女神‘)  #增加一个元素
  print(set1)


  update:迭代的增加
  set1.update(‘A‘)
  print(set1)
  set1.update(‘老师‘)
  print(set1)
  set1.update([1,2,3])
  print(set1)

  3、集合的删

  set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘}
  set1.remove(‘alex‘)    #删除一个元素
  print(set1)

  set1.pop()      #随机删除一个元素
  print(set1)

  set1.clear()    #清空集合
  print(set1)

  del set1        #删除集合
  print(set1)

  4、集合的其他操作

    4.1交集(&或者intersectiion)

  set1 = {1,2,3,4,5}
  set2 = {4,5,6,7,8}
  print(set1 & set2)
  print(set1.intersection(set2))

    4.2并集(| 或者union)

  set1 = {1,2,3,4,5}
  set2 = {4,5,6,7,8}
  print(set1 | set2)
  print(set1.union(set2))

    4.3差集(-或者difference)

  set1 = {1,2,3,4,5}
  set2 = {4,5,6,7,8}
  print(set1- set2)
  print(set1.difference(set2))

    4.4反交集(^或者symmetric_difference)

  set1 = {1,2,3,4,5}
  set2 = {4,5,6,7,8}
  print(set1 ^ set2)
  print(set1.symmetric_difference(set2))

    4.5子集与超集

  set1 = {1,2,3}
  set2 = {1,2,3,4,5,6}
  print(set1<set2)
  print(set1.issubset(set2))  #这两个相同说明set1是set2的子集

  print(set2>set1)
  print(set2.issuperset(set1))#这两个相同说明set2是set1的超集

  5、frozenset不可变集合,让集合变成不可变类型

  s = frozenset(‘barry‘)
  print(s,type(s))    #frozenset({‘r‘, ‘a‘, ‘b‘, ‘y‘}) <class ‘frozenset‘>

  集合的查询只能用循环操作

二、深浅copy

 1、浅copy

  l1 = [1, 2, 3, [‘barry‘, ‘alex‘]]
  l2 = l1.copy()
  print(l1,id(l1))  #[1, 2, 3, [‘barry‘, ‘alex‘]] 2628597576008
  print(l2,id(l2))  #[1, 2, 3, [‘barry‘, ‘alex‘]] 2628597576136
  l1[1] = 222
  print(l1,id(l1))  #[1, 222, 3, [‘barry‘, ‘alex‘]] 2628597576008
  print(l2,id(l2))  #[1, 2, 3, [‘barry‘, ‘alex‘]] 2628597576136

  l1[3][0] = ‘wusir‘
  print(l1,id(11))  #[1, 222, 3, [‘wusir‘, ‘alex‘]] 1981768224
  print(l2,id(l2))  #[1, 2, 3, [‘wusir‘, ‘alex‘]] 2628597576136

 

   对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性

  2、深deepcopy

  import copy
  l1 = [1, 2, 3,[‘barry‘, ‘alex‘]]
  l2 = copy.deepcopy(l1)
  print(l1,id(11))    # [1, 2, 3, [‘barry‘, ‘alex‘]] 1981768224
  print(l2,id(l2))    #[1, 2, 3, [‘barry‘, ‘alex‘]] 1874792784136

  l1[1] = 222
  print(l1,id(l1))    #[1, 222, 3, [‘barry‘, ‘alex‘]] 1874792680392
  print(l2,id(l2))    #[1, 2, 3, [‘barry‘, ‘alex‘]] 1874792784136

  l1[3][0] =  ‘wusir‘
  print(l1,id(l1))    #[1, 222, 3, [‘wusir‘, ‘alex‘]] 1874792680392
  print(l2,id(l2))    #[1, 2, 3, [‘barry‘, ‘alex‘]] 1874792784136

  

  对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变

four

标签:内存   size   add   class   bar   重要   upd   并集   font   

原文地址:http://www.cnblogs.com/gumo/p/7744876.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!